const limitLoad = (urls,handle,limit)=>{
let _urls = Object.assign([],urls);
let promise = _urls.splice(0,limit).map((url,index)=>{
return handle(url).then(()=>index)
})
let p = Promise.race(promise);
for(let i =0;i<_urls.length;i++){
p = p.then(index=>{
promise[index] = handle(_urls[i]).then(()=>index)
return Promise.race(promise)
})
}
}
const $urls = [{
info:'url1',
time:3000
},{
info:'url2',
time:4000
},{
info:'url3',
time:1000
},{
info:'url4',
time:6000
},{
info:'url5',
time:500
},{
info:'url6',
time:7000
},{
info:'url7',
time:5000
}]
const loadUrl = (url)=>{
return new Promise((resolve,reject)=>{
console.log(`${url.info}开始调用`)
setTimeout(()=>{
console.log(`${url.info}调用结束`);
resolve()
},url.time)
})
}
limitLoad($urls,loadUrl,3)