根据最大并发数实现并发请求
2024-11-19 本文已影响0人
Mstian
function concurrencyFetch(urls, maxNum) {
if (urls.length == 0) {
return Promise.resolve([])
}
let index = 0;
let result = [];
return new Promise((resolve) => {
async function _request() {
let i = index;
let url = urls[index]
index++;
try {
let res = await fetch(url)
result[i] = res;
} catch (error) {
result[i] = error;
} finally {
console.log(i, urls.length, 'xx')
if (index == urls.length) {
resolve(result);
}
if (index < urls.length) {
_request()
}
}
}
for (let i = 0; i < maxNum; i++) {
_request();
}
})
}
const urls = ['https://jsonplaceholder.typicode.com/todos/1', 'https://jsonplaceholder.typicode.com/todos/2', 'https://jsonplaceholder.typicode.com/todos/3']
concurrencyFetch(urls, 2).then((res) => {
console.log(res, 'resss');
})