我有一个像这样的承诺链
functionOne()
.catch(errorHandlerOne)
.then(functionTwo) // calls functionTwo(responseOne)
.catch(errorHandlerTwo)
.then(functionThree) // calls functionThree(responseTwo)
.catch(errorHandlerThree)
.finally(finalHandler)
这似乎是一个明显的答案,但我的问题是:
我可以访问responseOne
中的functionTwo()
,但如何访问responseOne
或functionThree()
中的finalHandler()
?
编辑:我考虑过将它分配给一个变量并稍后访问它,但它似乎非常hacky并且违背了promise链的流程。我正在寻找一种更好的方式
答案 0 :(得分:1)
如何在functionThree()或finalHandler()中访问responseOne?
以某种方式向前传递它们,作为then
回调的返回值(或它返回的promise的分辨率值,实际上是同样的事情)。
示例:
function asyncOp(name) {
return new Promise(resolve => {
resolve(name);
});
}
asyncOp("one")
.then(result1 => {
return asyncOp("two")
.then(result2 => [result1, result2]);
})
.then(results => {
console.log("results", results);
});
这样的数组只是一个选项;你可以使用一个对象,你可以将临时结果存储在处理程序关闭的变量中,......
ES5中的相同示例(以防有人需要):
function asyncOp(name) {
return new Promise(function(resolve) {
resolve(name);
});
}
asyncOp("one")
.then(function(result1) {
return asyncOp("two")
.then(function(result2) {
return [result1, result2];
});
})
.then(function(results) {
console.log("results", results);
});