zoukankan      html  css  js  c++  java
  • async和await

    一、async函数返回值都是Promise对象

    二、promise.then 成功的情况 对应await

    三、promise.catch 失败的情况 对应try…catch

    一、async函数返回值都是Promise对象

    1、返回值不是promise对象,那么新promise的状态为fullfilled,结果为返回的结果,不写return默认是 return undefined

          async function test() {
            return 100
          }
          const result = test()
          console.log(result) // 状态为fullfilled,结果为100
          async function test() {}
          const result = test()
          console.log(result) // 状态为fullfilled,结果为undefined

    2、返回值是promise对象,新promise的状态和结果为返回的状态和结果

          async function test() {
            return new Promise((res, rej) => {
              res(100)
            })
          }
          const result = test()
          console.log(result) // 状态为fullfilled,结果为100

    同上:

          async function test() {
            return Promise.resolve(100)
          }
          const result = test()
          console.log(result) // 状态为fullfilled,结果为100
          async function test() {
            return Promise.reject()
          }
          const result = test()
          console.log(result) // 状态为rejected,结果为100

    3、抛出异常,新promise的状态为rejected,结果为抛出的值

          async function test() {
            throw new Error('错误')
          }
          const result = test()
          console.log(result) // 状态为rejected,结果为Error: 错误

    二、promise.then 成功的情况 对应await

    1、await表达式后跟的是promise时,

      若promise状态为fullfilled:

          async function test() {
            const p = Promise.resolve(100)
            p.then((res) => {
              console.log(res) // 100
            })
            const res = await p
            console.log(res) // 100
            return res
          }
          const result = test()
          console.log(result) // 状态为fulfilled,结果为100,没有写return默认为return undefined

      若promise状态为rejected,需要用try…catch捕获:

          async function test() {
            const p = Promise.reject(100)
            try {
              const res = await p
              console.log(res)
            } catch (e) {
              console.log('err', e) // err 100
              return e
            }
          }
          const result = test()
          console.log(result) // 状态为fulfilled,结果为100

    2、await后跟的是其他值,将该值作为await的返回值

          async function test() {
            const res = await 100 // 内部会封装成 await Promise.resolve(100)
            console.log(res)
            return res
          }
          const result = test()
          console.log(result) // 状态为fulfilled,结果为100

    3、await后跟的是一个异步函数,将该函数的返回值作为await的返回值

          async function fn() {
            return 1
          }
          async function test() {
            const res = await fn()
            console.log(res)
            return res
          }
          const result = test()
          console.log(result) // 状态为fulfilled,结果为1

    三、promise.catch 失败的情况 对应try…catch

          async function test() {
            const data = await Promise.reject(100)
            console.log(data)
          }
          const s = test() // Uncaught (in promise) 100
          console.log(s) // 未使用try...catch捕获,状态为rejected,结果为100
    
          async function test1() {
            try {
              const data = await Promise.reject(100)
              console.log(data)
            } catch (e) {
              console.log('err', e) // err 100
              return e
            }
          }
          const result = test1()
          console.log(result) // 状态为fullfilled,结果为100。catch中不写return默认是return undefined
  • 相关阅读:
    使用excel2003中的solver解决最优化问题
    图的邻接表存储方式的建立
    LINUX下使用VI
    LINUX下基本命令
    应用程序各对象创建的顺序
    zookeeper常遇错误详解
    MapReduce_partition
    MapReduce_TopK
    MapReduce_MaxValue
    Hbase用java基础操作
  • 原文地址:https://www.cnblogs.com/wuqilang/p/15173367.html
Copyright © 2011-2022 走看看