封装一个并发请求
// urls:请求url的数组
// 最大并发数
function concurRequest(urls, maxNum){
return new Promise(resolve=>{
if(urls.length === 0){
resolve([])
return
}
const results = []
let index = 0;
let count = 0; // 当前请求完成数量
// 发送请求
async function request(){
if(index >= urls.length) return
const i = index
const url = urls[index]
index++
try {
const resInfo = await fetch(url)
const res = await resInfo.json()
results[i] = res;
} catch (error) {
results[i] = error
}finally{
count++
if(count === urls.length){
resolve(results)
}
request()
}
}
const times = Math.min(maxNum, urls.length)
for(let i = 0; i < times; i++){
request()
}
})
}
// 测试上面的方法
const urls = []
for(let i = 1; i < 5; i++){
urls.push(`http://localhost:2022/api/list/${i}`)
}
concurRequest(urls, 2).then(res=>{
console.log('res',res);
})
这是通过express
编写的一个模拟接口
const express = require('express')
const router = express.Router()
for(let i = 1; i < 20; i++){
router.get(`/${i}`, (req, res)=>{
res.send({code: 200, data: i})
})
}
module.exports = router
开发中图片上传的需求有可能会用上,例如,一次上传十张图片等等