zoukankan      html  css  js  c++  java
  • async与await实现异步操作的同步化

    async与await实现异步操作的同步化

    一.async修饰方法

      async这个单词从字面意思来理解就是异步的意思,async用来修饰方法,那么该方法就是一个异步方法,如下面的案例:

    (function() {
        async function asyncFunc() {
            setTimeout(() => {
                console.log('invoked after 1 second');
            }, 1000)
        }
        asyncFunc();
        console.log('output');
    })()

    在chrome中的输出结果如下:

     

    async只是Promise的语法糖, 为了验证这个标题,我们举如下两个案例:

    A.async返回正确的结果

    (function() {
        async function asyncFunc() {
            return 'success'
        }
        let result = asyncFunc();
        console.log(result);
    })()

    chrome中执行的结果如下:

    B.async抛出异常

    (function() {
        async function asyncFunc() {
            throw new Error('error')
        }
        let result = asyncFunc();
        result.catch(error => {
            console.log('=======');
        })
    })()

    chrome中执行的结果如下:

    二.await的用法

      await从字面的意思就是 "等待",只能用在async修饰的方法中,通常用在返回Promise对象之前,并且返回值为Promise中resolve或者reject方法中返回的值,如下代码所示:

    (async function() {
        async function getValue() {
            let prom = await new Promise((resolve, reject) => {
                setTimeout(() => {
                    if(Math.random() > 0.5) {
                        resolve('gt 0.5')
                    }else {
                        reject('let 0.5')
                    }
                }, 2000) 
            })
            return prom;
        }
        
        let value = await getValue();
        console.log(value);
    })()

    chrome中执行的结果如下:

  • 相关阅读:
    (原创)如何利用UDP协议封装一个数据包
    <acarousel> 轮播图片无法触屏滑动
    Groovy开发语言
    关于ViewStub标签
    关键字transient和Volatile
    Android中Activity启动模式
    Android 开源项目分类汇总
    AtomicInteger的并发处理
    Cygwin: died waiting for dll loading (转载)
    Android知识点(C2DM)
  • 原文地址:https://www.cnblogs.com/miller-zou/p/12334917.html
Copyright © 2011-2022 走看看