我在理解for...of
与.forEach()
在处理Promises时的区别方面遇到了困难。
使用以下代码片段:
const allSettled = async arr => {
const data = []
for (const promise of arr) {
try {
const result = await promise;
data.push(result);
} catch (e) {
data.push(e)
}
}
return data
}
我遍历数组中的每个Promise,等待其完成并将结果推入data
。它是按顺序执行的。
如果我有以下代码片段:
const badAllSettled = arr => {
const data = []
arr.forEach(async promise => {
try {
const result = await promise;
data.push(result);
} catch (e) {
data.push(e)
}
})
return data
}
我得到了一个空数组(因为forEach
不等待Promise完成)。
据我所知,for...of
适用于可迭代对象,因此它可能会暂停并等待await
返回。但是这个流程是如何逐步进行的,我不太明白。
谢谢!
.forEach()
不支持 Promise。 - Pointyfor ... of
是控制流,受await
影响(就像其他循环、if语句等一样)。forEach
只是一个方法调用,而await
仅使async
函数等待,但不会影响badAllSettled
。 - Bergi