JS中async/await实现异步调用的方法


Posted in Javascript onAugust 28, 2019

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实现异步调用的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
JS getMonth()日期函数的值域是0-11
Feb 15 Javascript
理解Javascript_01_理解内存分配原理分析
Oct 11 Javascript
原生Js与jquery的多组处理, 仅展开一个区块的折叠效果
Jan 09 Javascript
提示$ is not defined错误分析及解决
Apr 09 Javascript
div失去焦点事件实现思路
Apr 22 Javascript
jquery+php实现搜索框自动提示
Nov 28 Javascript
在Javascript中处理字符串之big()方法的使用
Jun 08 Javascript
js仿淘宝和百度文库的评分功能
May 15 Javascript
js获取iframe中的window对象的实现方法
May 20 Javascript
利用Angular7开发一个Radio组件的全过程
Jul 11 Javascript
微信小程序吸底区域适配iPhoneX的实现
Apr 09 Javascript
微信小程序之导航滑块视图容器功能的实现代码(简单两步)
Jun 19 Javascript
基于Node的Axure文件在线预览的实现代码
Aug 28 #Javascript
详解用async/await来处理异步
Aug 28 #Javascript
vue中监听返回键问题
Aug 28 #Javascript
微信小程序 拍照或从相册选取图片上传代码实例
Aug 28 #Javascript
小程序中this.setData的使用和注意事项
Aug 28 #Javascript
微信小程序 可搜索的地址选择实现详解
Aug 28 #Javascript
vue实现标签云效果的方法详解
Aug 28 #Javascript
You might like
PHP sprintf() 函数的应用(定义和用法)
2012/06/29 PHP
php常用正则函数实例小结
2016/12/29 PHP
基于php(Thinkphp)+jquery 实现ajax多选反选不选删除数据功能
2017/02/24 PHP
Laravel5.* 打印出执行的sql语句的方法
2017/07/24 PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
2017/11/13 PHP
JavaScript版代码高亮
2006/06/26 Javascript
你必须知道的Javascript知识点之&quot;单线程事件驱动&quot;的使用
2013/04/23 Javascript
JS继承用法实例分析
2015/02/05 Javascript
javascript实现的图片切割多块效果实例
2015/05/07 Javascript
jQuery获取cookie值及删除cookie用法实例
2016/04/15 Javascript
如何在JS中实现相互转换XML和JSON
2016/07/19 Javascript
1秒50万字!js实现关键词匹配
2016/08/01 Javascript
js仿淘宝评价评分功能
2017/02/28 Javascript
史上最全JavaScript常用的简写技巧(推荐)
2017/08/17 Javascript
解决vue-quill-editor上传内容由于图片是base64的导致字符太长的问题
2018/08/20 Javascript
Vue 实例事件简单示例
2019/09/19 Javascript
原生微信小程序开发中 redux 的使用详解
2021/02/18 Javascript
[01:23]2014DOTA2国际邀请赛 球迷无处不在Ti现场世界杯受关注
2014/07/10 DOTA
[05:31]DOTA2上海特级锦标赛主赛事第三日RECAP
2016/03/05 DOTA
Python中处理字符串之islower()方法的使用简介
2015/05/19 Python
Pycharm学习教程(4) Python解释器的相关配置
2017/05/03 Python
PyTorch线性回归和逻辑回归实战示例
2018/05/22 Python
实例详解Python模块decimal
2019/06/26 Python
python模块常用用法实例详解
2019/10/17 Python
python飞机大战pygame游戏之敌机出场实现方法详解
2019/12/17 Python
浅谈pytorch中torch.max和F.softmax函数的维度解释
2020/06/28 Python
Python 实现微信自动回复的方法
2020/09/11 Python
德国狗狗用品在线商店:Schecker
2017/03/17 全球购物
如何获取某个日期是当月的最后一天
2013/12/05 面试题
农行实习自我鉴定
2013/09/22 职场文书
《雨霖铃》听课反思
2014/02/13 职场文书
小学生国庆65周年演讲稿范文(2篇)
2014/09/21 职场文书
2015年勤工助学工作总结
2015/04/29 职场文书
当幸福来敲门观后感
2015/06/01 职场文书
幼儿园庆六一主持词
2015/06/30 职场文书
分析Python list操作为什么会错误
2021/11/17 Python