用 async/await 来处理异步

228 阅读2分钟

为什么要用async/await

  1. 使用async函数可以让代码简洁很多,不需要像Promise一样需要then,不需要写匿名函数处理Promise的resolve值,也不需要定义多余的data变量
  2. 代码是从上往下执行更符合传统的语法更优雅,还避免了嵌套代码
  3. 异步请求axios的API都是返回的promise对象

什么是async/await

  • async:表示异步函数,异步函数也就意味着该函数的执行不会阻塞后面代码的执行
  • await:表示同步,意思是等待,需要按照顺序执行
  1. 写异步代码的新方式,同回调函数和Promise
  2. 基于Promise实现的,不能用于普通的回调函数
  3. 异步非阻塞: A调用B,无需等待B的结果,B通过状态,通知等来通知A或回调函数来处理
  4. 使异步代码看起来相同步的

基本用法

  1. async 关键字用于函数上
  2. await 关键字用于async定义的函数当中,接在promise对象前面可以得到reslove或者reject的结果
  3. 通过await可以不用then直接的得到Promise对象resolve的结果
  4. 用try/catch 来捕获异常,把await 放到 try 中进行执行,如有异常,就使用catch 进行处理
async getAllList() {
      try {
        let result = await getOperateStatus();
        let status = result.data;
        this.refresh();
      } catch (err) {
        console.log(err);
      }
}

Promise

ES6的Promise对象是一个构造函数,用来生成Promise实例

有了Promise对象,就可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数

Promise对象的三种状态

pending(等待) 、resolve(接受)、reject(拒绝)和all(一次执行)、race(速度)

方法

  • all统一执行完三个函数并将值存在一个数组里面返回给then进行回调输出
  • then 方法两种参数:then的2个参数;onresolove(成功) 和 onreject(失败)