美文网首页
async 和 await

async 和 await

作者: percykuang | 来源:发表于2020-04-30 13:57 被阅读0次

    async 和 await

    async和await是ES2016新增的两个关键字,它们借鉴了ES2015中生成器在实际开发中的应用,目的是简化Promise API的使用,并非是替代Promise

    async

    async用于修饰函数,放置在函数最开始的位置,被修饰函数的返回结果一定是Promise对象

    演示:

    async function test() {
      console.log(1)
      return 2
    }
    

    等效于下面

    function test() {
      return new Promise((resolve, reject) => {
        console.log(1)
        resolve(2)
      })
    }
    

    await

    await关键字必须出现在async函数中

    await用于某个表达式之前,如果表达式返回的是一个Promise对象,则得到的是thenable中的状态数据

    示例:

    async function test1() {
      console.log(1)
      return 2
    }
    
    async function test2() {
      const result = await test1()
      console.log(result) // 2
    
      // 上面两行代码相当于下面这么多行代码
      // return new Promise((resolve, reject) => {
      //   test1().then(data => {
      //     const result = data
      //     console.log(result)
      //     resolve()
      //   })
      // })
    }
    
    test2()
    

    await后面如果不是一个Promise对象呢?

    答案:使用Promise.resolve()直接包装

    async function test() {
      const result = await 1
      console.log(result)
    }
    test()
    

    等效于下面

    function test() {
      return new Promise((resolve, reject) => {
        Promise.resolve(1).then(data => {
          const result = data
          console.log(result)
          resolve()
        })
      })
    }
    

    async和await如何处理错误情况呢?

    答案:使用try catch

    async function getPromise() {
      if (Math.random() < 0.5) {
        return 1
      } else {
        throw 2
      }
    }
    
    async function test() {
      try {
        const result = await getPromise()
        console.log('正常状态', result)
      } catch(error) {
        console.log('错误状态', error)
      }
    }
    

    相关文章

      网友评论

          本文标题:async 和 await

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