JS控制并发请求数量
//链接 const arr_url = [ { url: 'url0', time: 3 }, { url: 'url1', time: 3 }, { url: 'url2', time: 3 }, { url: 'url3', time: 3 }, { url: 'url4', time: 3 }, { url: 'url5', time: 3 }, { url: 'url6', time: 0 }, { url: 'url7', time: 3 }, ]
//请求 fetch fn
const ajax = ({ url, time }) => {
return new Promise((res, reject) => {
setTimeout(() => {
console.log(url);
if (url == 'url3') {
reject('失败了')
}
else {
res('成功了')
}
}, time * 1000)
})
}
//do fecth
const getimg = arr => {
const arr_result = []
const fetchall = async (idx) => {
if (arr_result[idx]) {
idx++
await fetchall(idx)
} else {
arr_result[idx] = 1
ajax(arr[idx])
.catch(r => console.log('Error', r))
.finally(r => {
if (idx > arr.length) return
idx++
if (arr[idx]) {
fetchall(idx)
}
})
}
}
fetchall(0) //根据并发限制设定执行初始请求函数
fetchall(1)
}
getimg(arr)
ps:这是最终版本,最初的时候少个async和await,怎么弄都不对,后面查资料修改了,就没问题了,参考地址
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义