async/await实现异步调用

async/await多个函数关联调用

async/await使得异步代码看起来像同步代码
async函数会隐式地返回一个promise,而promise的reosolve值就是函数return的值
Async/Await不需要写.then,不需要写匿名函数处理Promise的resolve值,也不需要定义多余的data变量,还避免了嵌套代码
async声明一个异步函数
await只能在async函数中使用,后面跟一个promise对象
所以在模拟异步调用函数时,函数体内返回promise

async/await缺点

async函数里,无论是Promise reject的数据还是逻辑报错,都会被默默吞掉。所以最好把await放入try{}catch{}中,或者在async返回的promise对象中使用.cache捕获错误。

实现

项目中实现三个不同的接口调用,三个接口是相互关联的,前一个接口的返回值是后一个接口的参数,如果使用Promise实现的话,只能实现异步调用,但是无法相互关联,也就是数据不互通,所以使用async/await实现

  • 接口调用的方法独立封装,参数可动态设置
  • async声明异步方法,内部使用await关键字调用封装的接口,参数可直接传入
  • async/await相当于将Promise异步调用同步化,数据可实现关联
  • async/await会默认返回一个Promise对象,在实际调用中使用cache捕获错误
代码实现
<script>
  //再此使用定时器模拟异步接口的调用
  // 异步函数a
  function a() {
    return new Promise(resolve => {
      setTimeout(()=>{
        resolve('a')
      }, 1000)
    })
  }
  // 异步函数b,关联a参数
  function b(a) {
    return new Promise(resolve => {
      setTimeout(()=>{
        resolve(a+'b')
      }, 1000)
    })
  }
  // 异步函数c,关联b参数
  function c(b) {
    return new Promise(resolve => {
      setTimeout(()=>{
        resolve(b+'c')
      }, 1000)
    })
  }

  // 同步执行三个关联的异步函数
  async function d(){
      const da = await a();
      const db = await b(da);
      const dc = await c(db);
      return dc;
  }

  // 实际调用
  d().then(res=>{
    console.log(res)
  }).catch(err=>{
    console.log(err)
  });
</script>
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值