const urls = [
{
link: 'bytedance.com',
time: 1000
},
{
link: 'tencent.com',
time: 3000
},
{
link: 'alibaba.com',
time: 2000
},
{
link: 'microsoft.com',
time: 1000
},
{
link: 'apple.com',
time: 4000
},
{
link: 'hulu.com',
time: 3000
},
{
link: 'amazon.com',
time: 2000
}
]
const request = url => {
return new Promise(resolve => {
console.log(`开始执行: ${url.link}-${url.time}`)
setTimeout(() => {
resolve(url)
}, url.time)
})
}
const concurrentNum = 3
let concurrentTaskNum = 0
const taskAmount = urls.length
const result = []
function addTask(url) {
const task = request(url)
task.then(res => {
console.log(` - 完成执行: ${res.link}-${res.time}`)
const url = urls.shift()
if(url) {
addTask(url)
}
result.push(res)
if(result.length === taskAmount) {
console.log('全部执行完成')
}
})
}
while(concurrentTaskNum < concurrentNum) {
const url = urls.shift()
addTask(url)
concurrentTaskNum++
}