Javascript 为什么等待关键字在匿名函数中不起作用?
为什么Javascript 为什么等待关键字在匿名函数中不起作用?,javascript,async-await,arrow-functions,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])); } for(设i=0;i{…}?“然而,这不是最好的事情,因为您将同步运行它们。你真的想收集承诺,然后等待它们全部完成吗“我的意思是,从技术上讲,.map
names.forEach((name) => {
images.push(await loadImage(name));
})
不工作,但是
for (let i = 0; i < names.length; i++) {
images.push(await loadImage(names[i]));
}
for(设i=0;i
是吗
注意:loadImage只返回一个承诺,给出一个已加载的映像()
名称是一个字符串列表forEach中的第一个参数是它自己的函数。要在函数中使用
wait
,函数必须标记为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);
匿名函数不是异步函数。
await
需要在async
函数中。您缺少async
声明-async name=>{…}
?“然而,这不是最好的事情,因为您将同步运行它们。你真的想收集承诺,然后等待它们全部完成吗“我的意思是,从技术上讲,.map也在同步运行它们,这只会使将结果传递给.变得更容易。@KevinB这不是真的。我的代码同步地触发它们,然后等待它们并行完成。上面的forEach
代码将在运行循环的下一次迭代之前等待每个循环完成。不,forEach不会等待。一个for循环就可以了。答案中的两种情况都将并行运行所有请求。@KevinB