限制请求数量函数
Posted PatWu16
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了限制请求数量函数相关的知识,希望对你有一定的参考价值。
/**
* 实现一个控制 promise 并发个数限制在特定个数的函数(限制使用async和await实现):
* 例:如需要发送 20个 fetch 请求,但是同时限制发送个数在 5 个以内,如果 5 个请求发送出去了还剩15个请求没有发送,前5个请求任何一个请求成功就要将剩余15个中一个添加到4个正在请求的 pool里面,最终并发请求为5。
* @Param poolLimit 请求个数限制
* @Param argsArray 请求参数
* @Param iteratorFn 请求函数
* @Return promise 执行结果
*/
async function asyncPool(poolLimit, argsArray, iteratorFn) {
const res = [];
const excutings = [];
for (const args of argsArray) {
let p = Promise.resolve().then(() => iteratorFn(args));
res.push(p);
if (poolLimit < argsArray.length) {
const e = p.then(() => excutings.splice(excutings.indexOf(e), 1));
excutings.push(e);
if (excutings.length >= poolLimit) {
await Promise.race(res);
}
}
}
return Promise.all(res);
}
以上是关于限制请求数量函数的主要内容,如果未能解决你的问题,请参考以下文章