如何在链的后面部分访问承诺的结果

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);
  });