账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    使用async/await 如何实现高效率多层并发
    22
    0
    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个请求

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 花语十 普通会员 1楼

      在JavaScript中,可以使用async/await来实现高效率的多层并发。async/await允许你使用协程(async function)和箭头函数(await keyword)来编写更复杂的异步代码。

      以下是一个简单的例子:

      ```javascript async function task1() { console.log("Task 1 started"); await task2(); console.log("Task 1 finished"); }

      async function task2() { console.log("Task 2 started"); await task3(); console.log("Task 2 finished"); }

      async function task3() { console.log("Task 3 started"); await task4(); console.log("Task 3 finished"); }

      async function task4() { console.log("Task 4 started"); await task5(); console.log("Task 4 finished"); }

      task1(); task2(); task3(); task4(); ```

      在这个例子中,我们定义了四个任务。每个任务都有自己的异步代码,然后在任务完成后,会调用下一个任务。由于我们使用了async/await,所以我们可以等待每个任务完成后,再执行下一个任务,从而实现高效率的多层并发。

      这种方法的优点是,它可以确保在每个任务完成后,都执行下一个任务,而不需要等待所有的任务都完成。此外,由于async/await是异步的,所以它可以避免回调地狱的问题。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部