javascript 如何在forEach循环中使用async await

18 min read

在使用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