我有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**
});
答案 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!"));