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 相关文章推荐
jQuery获取css z-index在各种浏览器中的返回值
Sep 15 Javascript
尝试在让script的type属性等于text/html
Jan 15 Javascript
用javascript读取xml文件读取节点数据
Aug 12 Javascript
javascript中使用正则表达式清理table样式的代码
Apr 01 Javascript
jQuery随手笔记之常用的jQuery操作DOM事件
Nov 29 Javascript
浅谈JavaScript 中有关时间对象的方法
Aug 15 Javascript
JS给Array添加是否包含字符串的简单方法
Oct 29 Javascript
基于BootStrap的文本编辑器组件Summernote
Oct 27 Javascript
JS实现利用两个队列表示一个栈的方法
Dec 13 Javascript
pm2发布node配置文件ecosystem.json详解
May 15 Javascript
layui默认选中table的CheckBox复选框方法
Sep 19 Javascript
Vue 基于 vuedraggable 实现选中、拖拽、排序效果
May 18 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的配置文件php.ini
2006/10/09 PHP
php in_array 函数使用说明与in_array需要注意的地方说明
2010/04/13 PHP
PHP MemCached高级缓存配置图文教程
2010/08/05 PHP
php自动获取字符串编码函数mb_detect_encoding
2011/05/31 PHP
php中用加号与用array_merge合并数组的区别深入分析
2013/06/03 PHP
详谈php ip2long 出现负数的原因及解决方法
2017/04/05 PHP
js预加载图片方法汇总
2015/06/15 Javascript
JavaScript中的Repaint和Reflow用法详解
2015/07/27 Javascript
JS实现的倒计时效果实例(2则实例)
2015/12/23 Javascript
jQuery实现简单的图片查看器
2020/09/11 Javascript
H5手机端多文件上传预览插件
2017/04/21 Javascript
详解利用 Express 托管静态文件的方法
2017/09/18 Javascript
echarts饼图扇区添加点击事件的实例
2017/10/16 Javascript
vue select选择框数据变化监听方法
2018/08/24 Javascript
小程序页面动态配置实现方法
2019/02/05 Javascript
微信小程序实现页面浮动导航
2020/01/08 Javascript
[01:24:16]2018DOTA2亚洲邀请赛 4.6 全明星赛
2018/04/10 DOTA
[54:47]Liquid vs VP Supermajor决赛 BO 第五场 6.10
2018/07/05 DOTA
python获取android设备的GPS信息脚本分享
2015/03/06 Python
详解Python的Django框架中的模版相关知识
2015/07/15 Python
Python中字符串的处理技巧分享
2016/09/17 Python
用十张图详解TensorFlow数据读取机制(附代码)
2018/02/06 Python
Python基于Flask框架配置依赖包信息的项目迁移部署
2018/03/02 Python
解决django服务器重启端口被占用的问题
2019/07/26 Python
面向新手解析python Beautiful Soup基本用法
2020/07/11 Python
phonegap常用事件总结(必看篇)
2017/03/31 HTML / CSS
床上用品全球在线购物:BeddingInn
2016/12/18 全球购物
介绍一下linux的文件权限
2014/07/20 面试题
一个J2EE项目团队的主要人员组成是什么
2012/06/04 面试题
民主生活会整改措施(党员)
2014/09/18 职场文书
五好家庭事迹材料
2014/12/20 职场文书
上课睡觉万能检讨书
2015/02/17 职场文书
学生会2016感恩节活动小结
2016/04/01 职场文书
创业计划书之儿童理发店
2019/09/27 职场文书
OpenCV-Python模板匹配人眼的实例
2021/06/08 Python
redis复制有可能碰到的问题汇总
2022/04/03 Redis