在 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'];
在 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'];
console.log()
语句将显示在此处。