为什么await关键字在匿名函数中不起作用?

时间:2018-11-28 21:20:12

标签: javascript async-await arrow-functions

为什么

names.forEach((name) => {
    images.push(await loadImage(name));
})

不起作用,但

for (let i = 0; i < names.length; i++) {
    images.push(await loadImage(names[i]));
}

是吗?

注意:loadImage只是返回一个Promise,给出一个已加载的Image()
名称是一个字符串列表

1 个答案:

答案 0 :(得分:-1)

forEach中的第一个参数是它自己的函数。要在函数中使用await,该函数必须标记为async。它没有新功能,因此可以在循环中使用,并且可能正在循环中运行的功能标记为async。因此,要使forEach工作,您需要执行以下操作:

names.forEach(async (name) => {
    images.push(await loadImage(name));
})

但是,那不是最好的事情。真的,您想要收集承诺,然后等待它们全部完成:

const promises = names.map(name => loadImage(name));
const images = await Promise.all(promises);