javascript - 带有嵌套 Promise 的函数式编程

标签 javascript angularjs functional-programming promise

在一个 Angular 项目中,我正在开发一个具有许多不同场景的预订系统。根据 promise 的响应,它应该尝试对服务器进行不同的调用。这导致了一种回调 hell ,我认为 Promise 可以阻止我:函数不返回任何内容,而是启动另一个函数。

这是一个简化的决策树:

    1. 进行预订

      • 1.1(成功)- 获取预订详细信息

        • 1.1.1(成功)- 向用户显示预订详细信息
        • 1.1.2(失败)- 显示重试按钮
      • 1.2(失败)- 检查错误代码

        • 1.2.1 if (errorCode === '售完')
          • 1.2.1.1 - 尝试进行替代预订
          • 1.2.1.1.1(成功)加载预订详细信息
          • 1.2.1.1.1.1(成功)CheckPriceDifference()
          • 1.2.1.1.1.2(失败)显示 sellOutMessage();
      • 1.2.2 if (errorCode != 'soldout') * 显示重试按钮。

我的代码看起来像这样:

makeBooking()
.then(function(response){
     succesHandler(response);
}, function(error){
    errorHandler(response);
})

succesHandler(response){
    loadDetails(response)
      .then(function(details){
          showDetails(details);
    }, function(error){
          handleDetailsError(error);
    }
 }

 errorHandler(response){
     if ( checkSoldout(reponse) ){
          makeAlternativeBooking();
     }
 }

这是处理这些“嵌套” promise 的好(函数)方式吗?

最佳答案

你的流程在每个点都有分歧,你的代码不需要做太多的改变,除了,它可以稍微缩短,如:

makeBooking().then(succesHandler, errorHandler)

succesHandler(response){
    loadDetails(response)
      .then(showDetails, handleDetailsError)
 }

 errorHandler(response){
     if ( checkSoldout(reponse) ){
          makeAlternativeBooking();
     }
 }

关于javascript - 带有嵌套 Promise 的函数式编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37273152/

相关文章:

javascript - 异常 : Template parse errors in angular 2. 0 表现不同

java - 如何在 Java 8 中实现 Elvis 运算符?

Haskell 类型表示另一种类型的子集

javascript - 在javascript中读取多个url参数

javascript - 如何使用 Firebase 根据查询结果执行服务器验证?

javascript - Angular 提供者不工作

angularjs - 将输入传递给 Angular 2 中的嵌套组件

javascript - 使用 jquery 创建并复制选择框

javascript - Angular js/javascript 计算一次迭代的次数

javascript - 箭头函数是否具有像 Groovy Closure 一样的委托(delegate)属性