【发布时间】:2020-07-26 14:26:49
【问题描述】:
考虑以下承诺数组
const promiseArray = [1, 2, 3].map(num =>
new Promise(async resolve => {
while (num > 0) {
await foo();
num--;
}
await bar(num);
resolve(); // No value to return
})
);
const a = Promise.all(promiseArray);
resolve函数有必要吗?
我们可以省略它并将承诺变成这样吗?
const promiseArray = [1, 2, 3].map(num =>
new Promise(async () => {
while (num > 0) {
await foo();
num--;
}
await bar(num);
})
);
const a = Promise.all(promiseArray);
【问题讨论】:
-
Never pass an
async functionas the executor tonew Promise!所以简化为const aPromise = foo(1,2,3);或const aPromise = Promise.resolve(foo(1, 2, 3));。 -
resolve 函数有必要吗? - 如果没有
resolve函数调用,aPromise将永远无法实现。要实现它,你必须调用resolve函数 -
嗯,你试过了吗?等待
aPromise。您的第二个 sn-p 将不起作用。 -
如果 foo 返回一个承诺,如果你正在等待它,它必须返回,你为什么要把它包装在另一个承诺中?
-
感谢您的更新,但这里的“从不”实际上意味着从不。而你的第二个 sn-p 在你尝试时仍然不起作用。
标签: javascript ecmascript-6 promise es6-promise