正井猫

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

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中执行的结果如下:

 

posted on 2020-02-20 11:27  正井猫  阅读(4291)  评论(0编辑  收藏  举报