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

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

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

墨色风雨 2019-03-05 13:08:52
let count = 1;let startTime = new Date();const timePromiseFactory = (time) => {    return new Promise((resolve, reject) => {    setTimeout(() => {    console.log(`第${count++}条请求到达,用时${new Date() - startTime}毫秒`);        resolve(time)    }, time); })}function laucher() { const times1 = [3000, 1000, 4000]; //第一层请求 const times2_1 = [2000, 3000, 1000, 2000]; //第二层请求,第一层请求的第一个请求到达后触发 const times2_2 = [6000, 3000]; //第二层请求,第一层请求的第二个请求到达后触发 const times2_3 = [4000]; //第二层请求,第一层请求的第三个请求到达后触发 times1.map((time) => timePromiseFactory(time).then(function (time) {      if (time === 3000) {         times2_1.map((time) => timePromiseFactory(time))       } else if (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贡献1806条经验 获得超8个赞

function laucher() {

    const times1 = [3000, 1000, 4000];

    //第一层请求

    const times2_1 = [2000, 3000, 1000, 2000];

    //第二层请求,第一层请求的第一个请求到达后触发

    const times2_2 = [6000, 3000];

    //第二层请求,第一层请求的第二个请求到达后触发

    const times2_3 = [4000];

    //第二层请求,第一层请求的第三个请求到达后触发

    times1.forEach((time)=>{

        (async()=>{

            await timePromiseFactory(time);

            if (time === 3000) {

                times2_1.forEach((time)=>{

                    timePromiseFactory(time);

                });

            } else if (time === 1000) {

                times2_2.forEach((time)=>{

                    timePromiseFactory(time);

                });

            } else {

                times2_3.forEach((time)=>{

                    timePromiseFactory(time);

                });

            }

        }

        )();

        console.log(time);

    }

    );

}


查看完整回答
反对 回复 2019-03-17
  • 2 回答
  • 0 关注
  • 793 浏览
慕课专栏
更多

添加回答

举报

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