【发布时间】:2018-01-23 19:12:19
【问题描述】:
在下面的代码中,我想执行a、b 和c,但随后是a1,因为a1 被添加到a 中。但是,看起来 Promise.all 并没有更新为添加了新的 a1。最好的方法是什么?有Promise 全部更新吗?我尽量不在a 内做await a1。
var arr = [];
async function a() {
return new Promise(resolve => {
setTimeout(() => {
console.log("Resolve a");
arr.push(a1);
resolve(1);
}, 2000);
});
}
async function b() {
return new Promise(resolve => {
setTimeout(() => {
console.log("Resolve b");
resolve(2);
}, 4000);
});
}
async function c() {
return new Promise(resolve => {
setTimeout(() => {
console.log("Resolve c " + arr.length);
resolve(3);
}, 6000);
});
}
async function a1() {
return new Promise(resolve => {
setTimeout(() => {
console.log("Resolve a1");
resolve(11);
}, 2000);
});
}
arr = [a(), b(), c()];
(async function run() {
await Promise.all(arr);
})();
console.log('Done');
【问题讨论】:
-
这个的用例是什么?事后您可以将进一步的承诺与
Promise.all联系起来,但根据您的实际用例,可能会有其他解决方案。 -
(async function run() { await Promise.all(arr); })();的意义何在? -
我有任务管理(爬网)功能,按顺序触发每个任务。顺序很重要。
-
"我尽量不在
a中做await a1。" - 为什么?这正是你应该做的。
标签: javascript node.js asynchronous promise es6-promise