在一个 Angular 项目中,我正在开发一个具有许多不同场景的预订系统。根据 promise 的响应,它应该尝试对服务器进行不同的调用。这导致了一种回调 hell ,我认为 Promise 可以阻止我:函数不返回任何内容,而是启动另一个函数。
这是一个简化的决策树:
进行预订
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.1 if (errorCode === '售完')
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/