您可以为此使用
Promise.all(spec,MDN):它接受一堆单独的诺言,并给您返回一个诺言,当您给它的所有诺言都得到解决时,该诺言即被解决;或者当任何一个诺言被拒绝时,它就被拒绝。
因此,如果您做出
doSomeAsyncStuff承诺,那么:
var promises = [];for(i=0;i<5;i+){ promises.push(doSomeAsyncStuff());}Promise.all(promises) .then(() => { for(i=0;i<5;i+){ doSomeStuffonlyWhenTheAsyncStuffIsFinish(); } }) .catch((e) => { // handle errors here }); function doSomethingAsync(value) { return new Promise((resolve) => { setTimeout(() => { console.log("Resolving " + value); resolve(value); }, Math.floor(Math.random() * 1000)); }); } function test() { let i; let promises = []; for (i = 0; i < 5; ++i) { promises.push(doSomethingAsync(i)); } Promise.all(promises) .then((results) => { console.log("All done", results); }) .catch((e) => { // Handle errors here }); } test();
(对此
.catch您一点也不在意,但是您确实想要
.catch在现实世界中使用它,如先前所示。)
样本输出(由于,
Math.random首先完成的结果可能会有所不同):
Resolving 3Resolving 2Resolving 1Resolving 4Resolving 0All done [0,1,2,3,4]
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)