美文网首页
async、await

async、await

作者: 懂会悟 | 来源:发表于2020-09-23 08:16 被阅读0次

    1、async

    • async 函数,它就是 Generator 函数的语法糖,
    • async函数返回一个 Promise 对象,可以使用then方法添加回调函数。
    • 当函数执行的时候,一旦遇到await就会先返回,等到异步操作完成,再接着执行函数体内后面的语句。
    • async函数内部return语句返回的值,会成为then方法回调函数的参数
    • async函数内部抛出错误,会导致返回的 Promise 对象变为reject状态。抛出的错误对象会被catch方法回调函数接收到

    2、async使用方式

    • 函数声明
    • 函数表达式
    • 对象的方法
    • Class 的方法
    • 箭头函数
    // 函数声明
    async function foo() {}
    
    // 函数表达式
    const foo = async function () {}
    
    // 对象的方法
    let obj = { async foo() {} }
    obj.foo().then(...)
    
    // Class 的方法
    class Storage {
      constructor() {
        this.cachePromise = caches.open('avatars')
      }
    
      async getAvatar(name) {
        const cache = await this.cachePromise;
        return cache.match(`/avatars/${name}.jpg`)
      }
    }
    
    const storage = new Storage();
    storage.getAvatar('jake').then(…)
    
    // 箭头函数
    const foo = async () => {}
    
    

    3、await

    • 正常情况下,await命令后面是一个 Promise 对象,返回该对象的结果。如果不是 Promise 对象,就直接返回对应的值。
    • 如果await后面的异步操作出错,那么等同于async函数返回的 Promise 对象被reject。

    4、await使用注意事项

    • 由于await命令后面的Promise对象,运行结果可能是rejected,所以最好把await命令放在try...catch代码块中
    • 多个await命令后面的异步操作,如果不存在继发关系,最好让它们同时触发
    • await命令只能用在async函数之中,如果用在普通函数,就会报错。在async函数里慎用forEach所有遍历最好都用for循环
    // 写法一
    let [foo, bar] = await Promise.all([getFoo(), getBar()]);
    
    // 写法二
    let fooPromise = getFoo();
    let barPromise = getBar();
    let foo = await fooPromise;
    let bar = await barPromise;
    
    

    5、补充

    async 会将其后的函数(函数表达式或 Lambda)的返回值封装成一个 Promise 对象,而 await 会等待这个 Promise 完成,并将其 resolve 的结果返回出来。


    相关文章

      网友评论

          本文标题:async、await

          本文链接:https://www.haomeiwen.com/subject/bitosktx.html