Async-Await

190 阅读1分钟

简单概括核心理解的知识点

1. 定义

本质上式Promise的语法糖,asnyc是异步的缩写,await可以理解为等待。

async function testAsy(){
   return 'hello world';
}
let result = testAsy(); 
console.log(result)

根据定义,通过asnyc声明的函数将return的结果通过Promise.resolve()将返回值转化为Promise对象。因此,当没有await语句执行async函数,它就会立即执行,返回一个Promise对象,非阻塞,与普通的Promise对象函数一致

  • awiat等待的一般是一个Promise对象,也可以是其他值

  • 如果的等待Promise则返回Promise的处理结果,其他值则返回值本身

  • await会暂停当前async函数的执行,等待Promise进行处理

  • Promise(fulfillded),其将回调的resolve函数参数作为await表达式的值,继续执行async function

  • Promise(rejected),await表达式会把Promise异常原因抛出;另外如果await操作符后面的表达式不是一个Promise对象,则返回该值本身。

  • await接受的对应也可以是一个Promise类的thenable对象

  • class内部可以直接声明async函数

    class Waiter {
      async wait() {
        return await Promise.resolve(1);
      }
    }
    ​
    

错误处理

async function f() {
  throw new Error("Whoops!");
}

在await async函数中,可以使用以上方法抛出错误,效果与reject基本一致

async关键字的作用

  1. 用于修饰一个函数,保证函数的返回值一定是一个Promise类型的值
  2. 允许函数内部使用await关键字

await关键字的作用

1.让JS等待给定的Promise对象setteled,然后根据成功与否执行

  1. 如果有 error,就会抛出异常 —— 类似在对应位置调用了 throw error 一样
  1. 成功则返回resolve对应的结果