【JS】并发请求

时间:2024-03-25 16:38:25
function concurRequest(urls, maxNum) { return new Promise(resolve => { // urls为空,直接返回 if (urls.length === 0) { resolve([]) return } let result = [] // 请求结果 let index = 0 // urls索引 let count = 0 // 当前请求完成数 async function request() { if (index === urls.length) return // urls全部遍历了 const i = index // 当前请求索引 const url = urls[index] // 当前请求url index++ try { const resp = await fetch(url) // 请求 result[i] = resp // 将请求结果按照urls的顺序放入result数组中 } catch (err) { result[i] = err } finally { count++ // 请求完成数+1 if (count === urls.length) { resolve(result) }// 判断是否所有请求都已完成 request() } } const min = Math.min(urls.length, maxNum) for (let i = 0; i < min; i++) { request() } }) }