等待承诺链中的所有承诺

时间:2015-10-29 23:59:29

标签: javascript promise

有没有办法等待Promise链中的所有承诺?我已经发现了Promise.all()函数来等待一组promises,但我无法做到这一点。

我有一些大致相同的东西

var returnPromise2;
var returnPromise1 = function1ThatReturnsAPromise.then(
    function onSuccess(array) {
       console.log("First function finished");
    }).then( function (value) {
          returnPromise2 = function2ThatReturnsAPromise(value);
    });
    return [returnPromise1, returnPromise2];

所以在我的调用代码中,如果我Promise.all(arrayOfPromises),我可以从returnPromise1获取值,但不能获取第二个值。 dillema是在返回时,returnPromise2仍为空。

有关如何处理此问题的任何提示。

1 个答案:

答案 0 :(得分:3)

当在.then()处理程序内部时,如果您希望将其链接到链中并使其值成为已实现的值,则必须返回一个承诺。

虽然我从你的问题中并不完全清楚你想要实现的目标,但似乎你想要做的就是:

function1ThatReturnsAPromise().then(function(array) {
   console.log("First function finished");
   return array;
}).then(function(value) {
      return function2ThatReturnsAPromise(value);
}).then(function(finalValue) {
    // you can process the finalValue here which will be the last
    // value returned or the fulfilled value of the last promise returned
});

如果你想累积来自多个承诺的值,那么有几种不同的设计模式。以下是先前的答案,显示了几种不同的方法。

Chaining Requests and Accumulating Promise Results

How do I access previous promise results in a .then() chain?