在使用forEach
循环时,我们不能直接使用await
关键字,因为它不支持异步操作。但我们可以使用Promise.all
方法将异步操作的结果收集起来,然后使用await
来等待这个方法返回的结果。
下面是一个示例代码:
async function foo() {
const results = await Promise.all(
[1, 2, 3].map(async (value) => {
const result = await someAsyncFunction(value);
return `Result: ${result}`;
})
);
console.log(results);
}
async function someAsyncFunction(value) {
return new Promise((resolve) =>
setTimeout(() => resolve(value ** 2), Math.random() * 1000)
);
}
foo();
在这个例子中,我们定义了一个异步函数 someAsyncFunction
,它接受一个参数 value
,并返回一个异步结果。在 foo
函数中,我们使用 .map()
方法创建了一个新数组,它的元素是异步函数返回的结果。然后,我们使用 Promise.all
方法将这个数组中所有的异步操作结果收集起来,并使用 await
等待它完成。最后,我们将收集到的结果打印到控制台上。
注意在 map
方法中的回调函数使用了async
关键字,将异步操作的结果包装成了Promise
对象返回。而在 Promise.all
中使用 await
等待所有的异步操作结束后,将结果作为数组返回给results
。