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 相关文章推荐
javascript中的float运算精度实例分析
Aug 21 Javascript
jquery EasyUI的formatter格式化函数代码
Jan 12 Javascript
jquery实现鼠标滑过小图查看大图的方法
Jul 20 Javascript
谈谈我对JavaScript DOM事件的理解
Dec 18 Javascript
JavaScript中的this,call,apply使用及区别详解
Jan 29 Javascript
jQuery弹出遮罩层效果完整示例
Sep 13 Javascript
微信小程序 for 循环详解
Oct 09 Javascript
探讨跨域请求资源的几种方式(总结)
Dec 02 Javascript
深入理解AngularJS中的ng-bind-html指令
Mar 27 Javascript
video.js 一个页面同时播放多个视频的实例代码
Nov 27 Javascript
使用p5.js临摹动态图片
Nov 04 Javascript
如何利用node转发请求详解
Sep 17 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.ini 中文版
2006/10/28 PHP
curl不使用文件存取cookie php使用curl获取cookie示例
2014/01/26 PHP
PHP使用递归算法无限遍历数组示例
2017/01/13 PHP
浅谈PHP中的面向对象OOP中的魔术方法
2017/06/12 PHP
PHP简单实现正则匹配省市区的方法
2018/04/13 PHP
利用PHP计算有多少小于当前数字的数字方法示例
2020/08/26 PHP
推荐dojo学习笔记
2007/03/24 Javascript
JS高级拖动技术 setCapture,releaseCapture
2011/07/31 Javascript
将字符串中由空格隔开的每个单词首字母大写
2014/04/06 Javascript
javascript实现回到顶部特效
2015/05/06 Javascript
javascript实现五星评价代码(源码下载)
2015/08/11 Javascript
JavaScript控制浏览器全屏及各种浏览器全屏模式的方法、属性和事件
2015/12/20 Javascript
js 实现获取name 相同的页面元素并循环遍历的方法
2017/02/14 Javascript
JavaScript自定义文本框光标
2017/03/05 Javascript
基于vue.js实现侧边菜单栏
2017/03/20 Javascript
使用Browserify来实现CommonJS的浏览器加载方法
2017/05/14 Javascript
详谈javascript精度问题与调整
2017/07/08 Javascript
详解vue引入子组件方法
2019/02/12 Javascript
JQueryDOM之样式操作
2019/03/27 jQuery
python打开url并按指定块读取网页内容的方法
2015/04/29 Python
在Python的一段程序中如何使用多次事件循环详解
2017/09/07 Python
详解Python中的Numpy、SciPy、MatPlotLib安装与配置
2017/11/17 Python
Python设计模式之职责链模式原理与用法实例分析
2019/01/11 Python
在Pycharm terminal中字体大小设置的方法
2019/01/16 Python
对python中矩阵相加函数sum()的使用详解
2019/01/28 Python
python怎么删除缓存文件
2020/07/19 Python
Python连接Impala实现步骤解析
2020/08/04 Python
CSS3区域模块region相关编写示例
2015/08/28 HTML / CSS
生物化工工艺专业应届生求职信
2013/10/08 职场文书
《埃及的金字塔》教学反思
2014/04/07 职场文书
审计专业自荐信范文
2014/04/21 职场文书
党的群众路线教育实践活动总结大会主持词
2014/10/30 职场文书
小学生思想品德评语
2014/12/31 职场文书
投资意向协议书
2015/01/29 职场文书
2015年销售员工作总结范文
2015/04/07 职场文书
Python&Matlab实现樱花的绘制
2022/04/07 Python