Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么等待关键字在匿名函数中不起作用?_Javascript_Async Await_Arrow Functions - Fatal编程技术网

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