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 相关文章推荐
取键盘键位ASCII码的网页
Jul 30 Javascript
JavaScript使用技巧精萃[代码非常实用]
Nov 21 Javascript
JavaScript实现简单的时钟实例代码
Nov 23 Javascript
浅析jQuery中调用ajax方法时在不同浏览器中遇到的问题
Jun 11 Javascript
node.js中的buffer.Buffer.isBuffer方法使用说明
Dec 14 Javascript
jQuery实现菜单式图片滑动切换
Mar 14 Javascript
针对BootStrap中tabs控件的美化和完善(推荐)
Jul 06 Javascript
js css自定义分页效果
Feb 24 Javascript
微信小程序使用image组件显示图片的方法【附源码下载】
Dec 08 Javascript
vue App.vue中的公共组件改变值触发其他组件或.vue页面监听
May 31 Javascript
layui多图上传实现删除功能的例子
Sep 23 Javascript
Javascript实现鼠标点击冒泡特效
Dec 24 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下使用无限生命期Session的方法
2007/03/16 PHP
PHP中date()日期函数有关参数整理
2011/07/19 PHP
Add Formatted Data to a Spreadsheet
2007/06/12 Javascript
JavaScript this 深入理解
2009/07/30 Javascript
JavaScript DOM 学习第九章 选取范围的介绍
2010/02/19 Javascript
修改jquery里的dialog对话框插件为框架页(iframe) 的方法
2010/09/14 Javascript
Javascript 面向对象编程(coolshell)
2012/03/18 Javascript
js 获取和设置css3 属性值的实现方法
2013/05/06 Javascript
jquery鼠标放上去显示悬浮层即弹出定位的div层
2014/04/25 Javascript
JQuery右键菜单插件ContextMenu使用指南
2014/12/19 Javascript
jquery实现多条件筛选特效代码分享
2015/08/28 Javascript
jquery实现简单的表单验证
2015/11/17 Javascript
Angularjs 滚动加载更多数据
2016/03/17 Javascript
微信小程序 Template详解及简单实例
2017/01/05 Javascript
js仿新浪微博消息发布功能
2017/02/17 Javascript
Vue单文件组件的如何使用方式介绍
2017/07/28 Javascript
Vue 2.5.2下axios + express 本地请求404的解决方法
2018/02/21 Javascript
解决layui数据表格Date日期格式的回显Object的问题
2019/09/19 Javascript
详解ES6新增字符串扩张方法includes()、startsWith()、endsWith()
2020/05/12 Javascript
echarts实现晶体球面投影的实例教程
2020/10/10 Javascript
python的迭代器与生成器实例详解
2014/07/16 Python
分析在Python中何种情况下需要使用断言
2015/04/01 Python
Python中pygame的mouse鼠标事件用法实例
2015/11/11 Python
妙用itchat! python实现久坐提醒功能
2019/11/25 Python
python使用scapy模块实现ping扫描的过程详解
2021/01/21 Python
Python绘制数码晶体管日期
2021/02/19 Python
html5弹跳球示例代码
2013/07/23 HTML / CSS
用canvas做一个DVD待机动画的实现代码
2019/04/12 HTML / CSS
求职自荐信
2013/12/14 职场文书
小学信息技术教学反思
2014/02/10 职场文书
招聘专员岗位职责
2014/03/07 职场文书
房屋登记授权委托书范本
2014/10/09 职场文书
2014年安全生产工作总结
2014/11/13 职场文书
学校安全管理制度
2015/08/06 职场文书
如何设计高效合理的MySQL查询语句
2021/05/26 MySQL
MySQL连接查询你真的学会了吗?
2021/06/02 MySQL