





















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')
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。