/**
* 将所有的结果返回,返回一个promise,失败的情况也返回失败原因
* @param {*} urls 代请求的urls数组
* @param {*} max 最大并发数
*/
function task(urls,max=3){
let index =0
const result=[]
let count =0
return new Promise((reslove,reject)=>{
function run(){
let i = index
index++
urls[i]&& urls[i].then((res)=>{
result[i] = res
},(err)=>{
result[i] = err
}).finally(()=>{
count++
if(count === urls.length){
reslove(result)
}
// 不能使用result.length的长度来与urls.length的长度来判断,
run()
})
console.log(result,'result')
}
for(let i=0;i<max;i++){
run()
}
})
}
function timeOut(time,type,info){
return new Promise((reslove,reject)=>{
setTimeout(()=>{
type==='res'?reslove(info):reject(info)
},time)
})
}
const arr=[
timeOut(20000,'rej','第二个失败'),
timeOut(10000,'res','第三个成功'),
timeOut(5000,'rej','第五个失败'),
timeOut(2000,'res','第四个成功'),
timeOut(400,'res','第六个成功'),
timeOut(500,'res','第七个成功'),
timeOut(6000,'res','第八个成功'),
timeOut(10,'res','第一个成功'),
]
task(arr,3).then(res=>{
console.log(res,'res')
})
最大并发数
最新推荐文章于 2024-07-25 15:03:56 发布