按特定顺序运行Promises

时间:2017-05-05 11:30:30

标签: javascript

我有5个承诺,我想按特定顺序排列。但是我找到了一种方法让它们按照正确的顺序挣扎了很多。 我尝试了以下,产生(1-2)-5-(3-4)而不是(1-2) - (3-4)-5,或(3-4) - (1-)的顺序2)-5(也行)。所以第五次来得太早,应该是最后一次。我已经尝试将1 + 2 + 3 + 4放入数组/列表中,如下所示,然后创建第5个承诺,告诉它等待执行1-4。但正如所说的那样,订单错误地转出......任何想法?

this.promises.push(PROMISE1.then(() => {

    **Code for PROMISE 1**

    this.promises.push(PROMISE2.then(() => {

                        **Code for PROMISE 2**

                      })
   );
}));

this.promises.push(PROMISE3.then(() => {

    **Code for PROMISE 3**

        this.promises.push(PROMISE4).then(() => {

                        **Code for PROMISE 4**

                      })
        );
    }));

Promise.all(this.promises).then(() => {

      **Code for PROMISE 5**

   });

1 个答案:

答案 0 :(得分:0)

不是为每个承诺推送回调,而是返回内部承诺。

var promises = [];

promises.push(method1().then(() => { return method2().then(() => { } });
promises.push(method3().then(() => { return method4().then(() => { } });
Promise.all(promises).then(() => { ... });

这是一个工作样本:



function delay(time, name) {
   console.log("running", name);
   return new Promise(r => setTimeout(r, time));
}

var promises = [];

promises.push(delay(1000, "1").then(() => {
    console.log("1 inner");
    return delay(500, "1 inner").then(() => console.log("1 inner most"));
}));

promises.push(delay(250, "2").then(() => {
    console.log("2 inner");
    return delay(1000, "2 inner").then(() => console.log("2 inner most"));
}));

Promise.all(promises).then(() => console.log("all done!"));