使用昨天练过的Promise来封装一个函数,调用这个函数可以控制并发任务数量,避免过多任务同时执行,多余的任务放在等待队列里,等执行线程空出来后会取出等待队列里的任务执行;
function limitTask(taskList = [], limit = n) {
return new Promise((resolve, reject) => {
const len = taskList.length
let count = 0
// 同时启动limit个任务
while(limit > 0) {
start ()
limit -=1
}
function start() {
// 从数组中拿取第一个任务
const task = taskList.shift()
if(task) {
console.log("执行成功");
if(count == len -1) {
// 最后一个任务完成
resolve()
}else {
// 完成之后,启动下一个任务
count++
start()
}
}
}
})
}
//测试
limitTask(['task1', 'task2', 'task3', 'task4', 'task5'],3)
标签:count,taskList,start,并发,任务,limit,异步控制
From: https://www.cnblogs.com/rain111/p/17217336.html