ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

js 并发任务

js 并发任务
class TaskParallel{constructor(parallelcount=2){this.parallelcount=parallelcount;this.tasks=[];this.runningCount=0;}add(task){return new Promise((resolve,reject)=>{this.tasks.push({task,resolve,reject});this._runtask();})}_runtask(){while(this.runningCount<this.parallelcount && this.tasks.length>0){const {task,resolve,reject}=this.tasks.shift();this.runningCount++;task().then(resolve,reject).finally(()=>{this.runningCount--;this._runtask();})}}
}
function timeout(time){return new Promise((resolve)=>{setTimeout(()=>{resolve();},time)})
}
const superTask=new TaskParallel();
function addTask(time,name){
superTask.add(()=>timeout(time)).then(()=>console.log(`task ${name} finish`))
}addTask(1000,'task1')
addTask(1000,'task11')
addTask(1000,'task21')
addTask(1000,'task31')

 

返回列表