限制数量请求池函数实现
Posted PatWu16
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了限制数量请求池函数实现相关的知识,希望对你有一定的参考价值。
// function createRequestPool(poolSize) {
// }
// const request = createRequestPool(3);
// for (let i = 0; i < 10000; i++) {
// request(\'/count\').then(xxxx).catch(xxx)
// }
/**
* 记笔记,待验证
*/
function createRequestPool(poolSize) {
const reqs = [];
const temps = [];
return function (url) {
function runTask() {
// 循环添加到临时数组中
while (reqs.length && temps.length < poolSize) {
temps.push(reqs.shift());
}
// 遍历临时数组,发起请求
for (let i = 0; i < temps.length; i++) {
fetch(temps[i].url)
.then((data) => {
// 移除当前请求,并返回结果
temps.splice(temps.indexOf(temps[i]), 1);
temps[i].resolve(data);
// 每完成一个,就需要执行队列中的任务
runTask();
})
.catch((err) => {
// 移除当前请求,并返回结果
temps.splice(temps.indexOf(temps[i]), 1);
temps[i].reject(err);
});
}
}
return new Promise((resolve, reject) => {
reqs.push({
url,
resolve,
reject
});
runTask();
});
}
}
以上是关于限制数量请求池函数实现的主要内容,如果未能解决你的问题,请参考以下文章
aiohttp 异步http请求-8.TCPConnector限制连接池的大小