当前位置: 首页 > Web前端 > JavaScript

使用Generator函数实现异步任务队列

时间:2023-03-27 12:43:32 JavaScript

vargenAsyncTask2=(val,time)=>{return()=>{returnnewPromise(function(resolve,reject){lettimer=setTimeout(()=>{clearTimeout(timer);resolve(val);},时间);});}}//任务队列vartaskArr=[genAsyncTask2('第一个异步任务,时间为2秒',2000),genAsyncTask2('第二个异步任务,时间为1秒',1000),genAsyncTask2('The第三个异步任务,时间0.8秒',800),genAsyncTask2('第四个异步任务,时间2.5秒',2500)];function*genFun(taskArr){for(leti=0,len=taskArr.length;i{console.log('genSync',res);返回资源;});}}/***自动执行generate函数的next,并保证执行顺序*@paramgenerateFngeneratefunction*@paramparamsgenerate函数执行需要的参数*/functiongenerateAutoExec(generateFn,...params){varg=generateFn(...params);varnext=function(res){if(res.done||typeofres.value=='undefined')返回res.value;res.value.then((data)=>{console.log('data',data);next(g.next(data));}).catch((err)=>{console.error(err);下一个(g.throw(err));});}下一个(g.下一个());}generateAutoExec(genFun,taskArr);