使用嵌套承诺的函数式编程

时间:2016-05-17 10:10:28

标签: javascript angularjs functional-programming promise

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

这是一个简化的决策树:

    1. 预订

      • 1.1(成功) - 获取预订详情

        • 1.1.1(成功) - 向用户显示预订详情
        • 1.1.2(失败) - 显示重试按钮
      • 1.2(失败) - 检查errorCode

        • 1.2.1 if(errorCode ===' soldout')
          • 1.2.1.1 - 尝试另类预订
          • 1.2.1.1.1(成功)加载预订详情
          • 1.2.1.1.1.1(succces)CheckPriceDifference()
          • 1.2.1.1.1.2(fail)显示soldOutMessage();
      • 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();
     }
 }

这是一种很好的(功能)方式来使用这些嵌套的#39;承诺?

1 个答案:

答案 0 :(得分:1)

您的流量在每个点都有分歧,对您的代码无需进行太多更改,除了它可以略微缩短,如:

makeBooking().then(succesHandler, errorHandler)

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

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