JS中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>

总结

以上所述是小编给大家介绍的JS中async/await实现异步调用的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对北冥有鱼编程技术建站教程网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

您可能感兴趣的文章:

  • 详解ES6之async+await 同步/异步方案
  • async/await与promise(nodejs中的异步操作问题)
  • NodeJs通过async/await处理异步的方法
  • 三分钟学会用ES7中的Async/Await进行异步编程
  • 详解async/await 异步应用的常用场景
  • JS基于ES6新特性async await进行异步处理操作示例
  • 详解用async/await来处理异步
  • async/await让异步操作同步执行的方法详解

相关推荐:

Python async与await原理_协程执行机制

async/await是基于事件循环的用户态协程机制,通过await显式让出控制权,协程对象需await或asyncio.run启动,暂停时保存栈帧,底层复用生成器机制,事件循环负责i/o轮询与协程调度。 Python的async与await不是线程或进程,而是一种用户态的协作式并发机制——协程(c...

Python async 与 await 底层机制解析

async/await是python对协程对象的显式标记和调度约定,asyncdef创建返回协程对象的函数,await作为挂起点要求操作对象实现await协议并在事件循环中让出控制权。 async与await不是线程,也不是协程的语法糖 它们是Python对协程对象(coroutineobject)...

Python await 背后到底发生什么

await是协程暂停并交还控制权给事件循环的协作式调度机制,依赖awaitable、事件循环和状态机协程三者配合;它非阻塞,本质是带语义的yield,仅适用于asyncdef函数。 当你写下await,Python并不是“暂停当前函数然后等结果回来”,而是把控制权交还给事件循环,让其他协程有机会运行...

Python async 程序为什么变慢问题解析

pythonasync程序变慢主因是“假异步”:混用同步阻塞操作(如time.sleep、requests)、协程串行执行、cpu密集任务阻塞事件循环、资源超发。应改用async对应方案、并发调度、线程池卸载及限流控制。 Pythonasync程序变慢,通常不是因为async本身有问题,而是异步代码...

Python async for 的内存使用优化

asyncfor本身不导致内存暴涨,问题在于底层异步迭代器的chunk大小失控;需控制分块读取、避免累积数据、限制anext返回量、慎用asyncfor队列,并用tracemalloc定位bytes内存源头。 asyncfor会悄悄吃光内存?关键在迭代器的chunk大小 Python的asyncfo...

Python async 函数为何不能直接调用

async函数调用必须await或用asyncio.run()执行,直接调用仅返回coroutine对象且触发runtimewarning;在同步环境中不可用threading/multiprocessing绕过,应使用asyncio.gather等原生并发机制。 async函数调用会报Runtim...

Python async with 的嵌套性能分析

asyncwith嵌套不会拉长await链但增加调度开销,每层隐式调用aenter和aexit各一次;嵌套事务等场景常见,异常传播可靠但依赖aexit返回值,高频使用需防延迟上升与资源泄漏。 asyncwith嵌套会不会导致await链过长 不会自动拉长await链,但嵌套本身会增加事件循环调度开销...