Skip to content

forEachAsync

对数组的每个元素执行异步函数。

typescript
await forEachAsync(array, callback);

参考

forEachAsync(array, callback, options?)

当需要对数组的每个元素执行具有副作用的异步操作时,使用 forEachAsync。与常规的 forEach 不同,它返回一个在所有异步操作完成时解析的 Promise。

typescript
import { forEachAsync } from 'es-toolkit/array';

// 更新所有用户信息。
const users = [{ id: 1 }, { id: 2 }, { id: 3 }];
await forEachAsync(users, async user => {
  await updateUser(user.id);
});
// 所有用户更新已完成。

// 限制并发数。
const items = [1, 2, 3, 4, 5];
await forEachAsync(items, async item => await processItem(item), { concurrency: 2 });
// 最多同时处理 2 个项目。

concurrency 选项允许您限制并发执行以控制服务器或数据库的负载。它适用于不返回值的操作,如日志记录、文件上传或数据库更新。

typescript
import { forEachAsync } from 'es-toolkit/array';

// 顺序上传文件。
const files = ['file1.txt', 'file2.txt', 'file3.txt'];
await forEachAsync(files, async file => await uploadFile(file), { concurrency: 1 });
// 一次只上传一个文件。

参数

  • array (readonly T[]):要迭代的数组。
  • callback ((item: T, index: number, array: readonly T[]) => Promise<void>):要为每个元素执行的异步函数。
  • options (ForEachAsyncOptions, 可选):控制并发的选项。
    • concurrency (number, 可选):最大并发操作数。如果未指定,所有操作将并发执行。

返回值

(Promise<void>):一个在所有操作完成时解析的 Promise。

采用 MIT 许可证发布。