Map Async Limit

语言

Map Async 中,我们编写了一个函数,该函数接受一个项目数组,并使用异步映射函数映射每个元素,并返回一个 Promise,该 Promise 解析为映射结果。

实际上,这可以用于使用 API 调用的结果映射输入数组,其中输入元素是 API 的参数。但是,如果您的数组包含大量项目,您将同时进行大量 API 调用,这几乎肯定会导致您受到 API 服务的速率限制。我们希望并发执行任务,以便更有效率,同时保持在 API 的速率限制范围内。

实现一个 mapAsyncLimit,它接受一个可选参数 size,即正在进行的异步任务的最大数量,以便输入数组可以以 size 的块进行处理,从而实现并行性并保持在提供的限制范围内。如果未指定 size,则块大小不受限制。

例子

async function fetchUpperCase(q: string) {
// 模拟将字符串转换为大写的 API 服务。
const res = await fetch('https://uppercase.com?q=' + q);
return await res.text();
}
// 任何时候最多只有 2 个待处理的请求。
const results = await mapAsyncLimit(
['foo', 'bar', 'qux', 'quz'],
fetchUpperCase,
2,
);
console.log(results); // ['FOO', 'BAR', 'QUX', 'QUZ'];

在这些公司提问

高级版功能购买高级版以查看出题公司。
查看计划