【发布时间】:2017-09-29 03:18:04
【问题描述】:
我在Handling multiple catches in promise chain 中看到了 Promise 实现,它产生了一个可读性很强的链
return validateInput
.then(checkLoginPermission)
.then(checkDisableUser)
.then(changePassword);
然而,为了做到这一点,每个函数都需要返回一个值而不是一个 Promise?由于 Promise 可以解析为 value 或 Promise,所以这不是问题。我的目标是让每个函数都具有可读清晰的逻辑。
尝试展开嵌套的promise函数时出现问题
return validateInput
.then(function(resultA) {
return checkLoginPermission
.then (function(resultB) {
// Do something with resultA
})
});
想象一下最初的实现涉及访问来自先前承诺的值。使用嵌套承诺,它很容易实现。但是使用扁平链,我需要像这样分解每个函数
function validateInput = function (resultA ) {
return Promise.resolve({resultA : resultA, resultB :
}
function checkLoginPermission = function (mix ) {
let resultA = mix.resultA;
let resultB = mix.resultB
//Do something with resultA
...
}
当链中的最后一个函数从一开始就依赖某些东西时,情况会更糟。这意味着该值必须从链的开头向下传递,即使它没有被使用。
那么我是否不小心踩到了某种可能影响性能的反模式?如果没有这些麻烦,我还能如何获得良好的可读性?
【问题讨论】:
标签: javascript promise bluebird