首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按特定顺序运行Promise

按特定顺序运行Promise
EN

Stack Overflow用户
提问于 2017-05-05 19:30:30
回答 1查看 80关注 0票数 0

我有5个承诺,我想放在一个具体的顺序。但我一直在努力寻找一种方法来将它们放在正确的顺序中。我尝试了以下方法,得到的顺序是(1-2)-5-(3-4)而不是(1-2)-(3-4)-5或(3-4)-(1-2)-5 (也可以)。所以5号来得太早了,应该是最后一个。我尝试将1+2+3+4放在一个数组/列表中,然后创建第五个promise,告诉它等待1-4的执行。但订单结果不正确,如上所述...有什么想法吗?

代码语言:javascript
复制
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**

   });
EN

回答 1

Stack Overflow用户

发布于 2017-05-05 19:33:18

返回内部的promise,而不是推送每个promise的回调。

代码语言:javascript
复制
var promises = [];

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

下面是一个工作示例:

代码语言:javascript
复制
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!"));

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43803854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档