为了账号安全,请及时绑定邮箱和手机立即绑定

使用async/await 如何实现高效率多层并发

使用async/await 如何实现高效率多层并发

浮云间 2019-05-22 23:32:42
letcount=1;letstartTime=newDate();consttimePromiseFactory=(time)=>{returnnewPromise((resolve,reject)=>{setTimeout(()=>{console.log(`第${count++}条请求到达,用时${newDate()-startTime}毫秒`);resolve(time)},time);})}functionlaucher(){consttimes1=[3000,1000,4000];//第一层请求consttimes2_1=[2000,3000,1000,2000];//第二层请求,第一层请求的第一个请求到达后触发consttimes2_2=[6000,3000];//第二层请求,第一层请求的第二个请求到达后触发consttimes2_3=[4000];//第二层请求,第一层请求的第三个请求到达后触发times1.map((time)=>timePromiseFactory(time).then(function(time){if(time===3000){times2_1.map((time)=>timePromiseFactory(time))}elseif(time===1000){times2_2.map((time)=>timePromiseFactory(time))}else{times2_3.map((time)=>timePromiseFactory(time))}}));}laucher();输出第1条请求到达,用时1005毫秒VM146:6第2条请求到达,用时3010毫秒VM146:6第3条请求到达,用时4003毫秒VM146:6第4条请求到达,用时4011毫秒VM146:6第5条请求到达,用时4013毫秒VM146:6第6条请求到达,用时5013毫秒VM146:6第7条请求到达,用时5013毫秒VM146:6第8条请求到达,用时6012毫秒VM146:6第9条请求到达,用时7011毫秒VM146:6第10条请求到达,用时8004毫秒像文件读取,网站爬虫这些程序,很多时候要实现多层并发,以上简单模拟了2层并发,可以看到8秒后输出10个请求,理论来说如果没有并发的限制下实现了最高效率的并发执行,上面使用的是promise,如何把其改写为async/await,也就是利用async/await,改写以上程序,程序中不能出现then方法,并在8秒内输出10个请求
查看完整描述

2 回答

?
慕标琳琳

TA贡献1830条经验 获得超9个赞

functionlaucher(){
consttimes1=[3000,1000,4000];
//第一层请求
consttimes2_1=[2000,3000,1000,2000];
//第二层请求,第一层请求的第一个请求到达后触发
consttimes2_2=[6000,3000];
//第二层请求,第一层请求的第二个请求到达后触发
consttimes2_3=[4000];
//第二层请求,第一层请求的第三个请求到达后触发
times1.forEach((time)=>{
(async()=>{
awaittimePromiseFactory(time);
if(time===3000){
times2_1.forEach((time)=>{
timePromiseFactory(time);
});
}elseif(time===1000){
times2_2.forEach((time)=>{
timePromiseFactory(time);
});
}else{
times2_3.forEach((time)=>{
timePromiseFactory(time);
});
}
}
)();
console.log(time);
}
);
}
                            
查看完整回答
反对 回复 2019-05-22
  • 2 回答
  • 0 关注
  • 309 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信