如何在链的后面部分访问承诺的结果
How to access results of a promise at a later part of a chain
我有一个像这样的承诺链
functionOne()
.catch(errorHandlerOne)
.then(functionTwo) // calls functionTwo(responseOne)
.catch(errorHandlerTwo)
.then(functionThree) // calls functionThree(responseTwo)
.catch(errorHandlerThree)
.finally(finalHandler)
这似乎是一个显而易见的答案,但我的问题是:
我可以访问 functionTwo()
中的 responseOne
很好,但是我如何访问 functionThree()
或 finalHandler()
中的 responseOne
?
编辑: 我考虑过将它分配给一个变量并稍后访问它,但它似乎很老套并且不利于承诺链的流动。我正在寻找更好的方法
how can I access the responseOne in functionThree() or finalHandler()?
通过以某种方式将它们向前传递,作为 then
回调的 return 值(或承诺它 returns 的解析值,这实际上是相同的东西)。
示例:
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);
});
我有一个像这样的承诺链
functionOne()
.catch(errorHandlerOne)
.then(functionTwo) // calls functionTwo(responseOne)
.catch(errorHandlerTwo)
.then(functionThree) // calls functionThree(responseTwo)
.catch(errorHandlerThree)
.finally(finalHandler)
这似乎是一个显而易见的答案,但我的问题是:
我可以访问 functionTwo()
中的 responseOne
很好,但是我如何访问 functionThree()
或 finalHandler()
中的 responseOne
?
编辑: 我考虑过将它分配给一个变量并稍后访问它,但它似乎很老套并且不利于承诺链的流动。我正在寻找更好的方法
how can I access the responseOne in functionThree() or finalHandler()?
通过以某种方式将它们向前传递,作为 then
回调的 return 值(或承诺它 returns 的解析值,这实际上是相同的东西)。
示例:
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);
});