zoukankan      html  css  js  c++  java
  • promise与async-await

    一. async/await 相对 promise 的优势

    async/await 拥有更通用的作用域,使得代码有更好的易读性和可维护性。

    promise 由于其链式调用,每一个函数都有自己的作用域,如果在多层链式调用的层级中,相隔两层的链需要有相互依赖关系,则需要额外的参数传递。

    场景如下:

    假设有 p1 、 p2 、 p3 三个异步操作函数, 并且返回的结果都是 promise。

    若: p2 依赖于 p1 的结果。 p3 依赖于 p2 和 p1 的结果。采用 promise 链式的代码书写如下:

    p1.then(r1 => Promise.all([r1, p2(r1)]))
      .then([r1,r2] => p3(r1, r2))
    

    而用 async/await 的写法则比较明了:

    let r1 = await p1();
    let r2 = await p2(r1);
    let r3 = await p3(r1,r2);
    
    再来一个例子:

    有4个返回值为promise的异步操作函数, p1、p2、p3、p4。

    若:p3依赖 p2 的结果, p4 依赖 p1、p3 的结果。

    采用 async/await 的写法如下:

    let r1 = await p1();
    let r2 = await p2();
    let r3 = await p3(r2);
    let r4 = await p4(r1,r3);
    

    采用promise的写法如下:

    Promise.all([p1,p2])
    .then([r1,r2] => Promise.all([r1, p3(r2)]))
    .then([r1,r3] => p4(r1,r3))
    

    以上写法,promise 的优势在于p1 、p2 彼此无相关依赖,应该并行执行。 而 await 的写法没有做到 p1 、 p2 并行, 故可修改如下:

    let r1 = p1();
    let r2 = await p2();
    let r3 = await p3(r2);
    let r4 = await p4(await r1,r3);
    
  • 相关阅读:
    杭电1176解答免费馅饼
    Locust 关联
    Locust 参数化
    Locust 介绍篇
    Locust 集合点
    Locust 其他协议
    团队项目需求分析报告
    第一次个人编程作业
    团队项目选题报告
    第一次软工作业
  • 原文地址:https://www.cnblogs.com/peakleo/p/10565887.html
Copyright © 2011-2022 走看看