• 七 vue学习 async/await


    1:  javaScript async/await:

      调用async函数的时候,是异步的,函数后面的代码继续执行。!

      async / await是ES7的重要特性之一,也是目前社区里公认的优秀异步解决方案

            Async(异步) 函数或多或少允许你编写顺序的 JavaScript 代码,而无需将所有逻辑包装在 callbacks(回调)

      await 操作符用于等待一个 Promise 对象, 它只能在异步函数 async function 内部使用;

      await 在等待 Promise 对象时会导致 async function 暂停执行, 一直到 Promise 对象决议之后才会 async function 继续执行;

      若在 async 函数中 return 了一个值 x, 不管 x 值是什么类型async 函数的实际返回值总是 Promise.resolve(x);

      await 只能出现在 async 函数中;

      单一的 Promise 链并不能发现 async/await 的优势,但是,如果需要处理由多个 Promise 组成的 then 链的时候,优势就能体现出来了(很有意思,Promise 通过 then 链来解决多层回调的问题,现在又用 async/await 来进一步优化它)。

           例子:    

      假设一个业务,分多个步骤完成,每个步骤都是异步的,而且依赖于上一个步骤的结果。我们仍然用 setTimeout 来模拟异步操作:

    /**
     * 传入参数 n,表示这个函数执行的时间(毫秒)
     * 执行的结果是 n + 200,这个值将用于下一步骤
     */
    function takeLongTime(n) {
        return new Promise(resolve => {
            setTimeout(() => resolve(n + 200), n);
        });
    }
    
    function step1(n) {
        console.log(`step1 with ${n}`);
        return takeLongTime(n);
    }
    
    function step2(n) {
        console.log(`step2 with ${n}`);
        return takeLongTime(n);
    }
    
    function step3(n) {
        console.log(`step3 with ${n}`);
        return takeLongTime(n);
    }

    现在用 Promise 方式来实现这三个步骤的处理:

    function doIt() {
        console.time("doIt");
        const time1 = 300;
        step1(time1)
            .then(time2 => step2(time2))
            .then(time3 => step3(time3))
            .then(result => {
                console.log(`result is ${result}`);
                console.timeEnd("doIt");
            });
    }
    
    doIt();
    
    // c:var	est>node --harmony_async_await .
    // step1 with 300
    // step2 with 500
    // step3 with 700
    // result is 900
    // doIt: 1507.251ms

    输出结果 result 是 step3() 的参数 700 + 200 = 900doIt() 顺序执行了三个步骤,一共用了 300 + 500 + 700 = 1500 毫秒,和 console.time()/console.timeEnd() 计算的结果一致。

    如果用 async/await 来实现呢,会是这样

    async function doIt() {
        console.time("doIt");
        const time1 = 300;
        const time2 = await step1(time1);
        const time3 = await step2(time2);
        const result = await step3(time3);
        console.log(`result is ${result}`);
        console.timeEnd("doIt");
    }
    
    doIt();

    结果和之前的 Promise 实现是一样的,但是这个代码看起来是不是清晰得多,几乎跟同步代码一样

    2: Promise 

  • 相关阅读:
    Android之旅 刷机 前言
    流程管理的售前意识
    站在企业角度来审视K2
    Android之旅 ROM定制 美化 默认屏的下方操作菜单
    在非K2服务器上部署基于K2的Web Application
    java拦截器与过滤器(转载)
    windows安装rediscluster集群
    SpringBoot使用Nacos配置中心(转载,可用)
    SpringBoot+Dubbo+MybatisPlus整合Seata分布式事务踩坑集合
    转载RabbitMQ教程
  • 原文地址:https://www.cnblogs.com/liufei1983/p/8729341.html
Copyright © 2020-2023  润新知