Map Async Limit

语言

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

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

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

例子

async function fetchUpperCase(q: string) {
// Fake API service that converts a string to uppercase.
const res = await fetch('https://uppercase.com?q=' + encodeURIComponent(q));
return await res.text();
}
// Only a maximum of 2 pending requests at any one time.
const results = await mapAsyncLimit(
['foo', 'bar', 'qux', 'quz'],
fetchUpperCase,
2,
);
console.log(results); // ['FOO', 'BAR', 'QUX', 'QUZ'];

在这些公司提问

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