【发布时间】:2018-09-16 01:38:01
【问题描述】:
我想使用 Promise.all() 执行一组承诺。我的方法是将这些承诺放在一个数组中,然后将数组传递给 Promise.all()。但是,我发现 Promise 在声明后立即开始执行,甚至不等待 Promise.all 被调用。
为什么会发生这种情况?如何让 Promise 仅在调用 Promise.all() 时执行?
let promiseArray = [];
const values = [1, 2, 3, 4, 5];
values.forEach((value)=>{
promiseArray.push(
new Promise((resolve, reject)=>{
console.log('value: ' + value);
return resolve();
})
)
})
console.log('start')
Promise.all(promiseArray)
/*
output is
value: 1
value: 2
value: 3
value: 4
value: 5
start
would have expected output to have been
start
value: 1
value: 2
value: 3
value: 4
value: 5
*/
【问题讨论】:
-
这就是它们的设计工作方式——Promise 执行器会立即同步执行......为什么没有简单的答案。
-
如果您希望代码按预期运行,只需更改为一行...
promiseArray.push(() =>然后Promise.all(promiseArray.map(fn => fn())) -
你的直觉其实是有道理的。急切执行 Promises 构造函数的设计决定至少是有问题的。
标签: javascript node.js promise es6-promise