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 跨域和ajax 跨域问题小结
Jul 01 Javascript
jquery动画4.升级版遮罩效果的图片走廊--带自动运行效果
Aug 24 Javascript
javascript弹出层输入框(示例代码)
Dec 11 Javascript
node.js中的fs.symlinkSync方法使用说明
Dec 15 Javascript
Bootstrap每天必学之基础排版
Nov 20 Javascript
JavaScript实现仿淘宝商品购买数量的增减效果
Jan 22 Javascript
如何用js实现鼠标向上滚动时浮动导航
Jul 18 Javascript
用vue2.0实现点击选中active其他选项互斥的效果
Apr 12 Javascript
Angularjs实现页面模板清除的方法
Jul 20 Javascript
微信小程序:数据存储、传值、取值详解
May 07 Javascript
深入了解Hybrid App技术的相关知识
Jul 17 Javascript
解决vue页面刷新,数据丢失的问题
Nov 24 Vue.js
基于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判断服务器是否是HTTPS连接
2013/07/05 PHP
JoshChen_php新手进阶高手不可或缺的规范介绍
2013/08/16 PHP
手把手教你自己写一个js表单验证框架的方法
2010/09/14 Javascript
使用JQuery和CSS模拟超链接的用户单击事件的实现代码
2012/05/23 Javascript
禁用键盘上的(全局)指定键兼容iE、Chrome、火狐
2013/05/14 Javascript
浅谈Javascript中匀速运动的停止条件
2014/12/19 Javascript
JS访问SWF的函数用法实例
2015/07/01 Javascript
js实现div拖动动画运行轨迹效果代码分享
2015/08/27 Javascript
Javascript控制div属性动态变化实例分析
2015/10/08 Javascript
jQuery根据ID、CLASS、等获取对象的实例
2016/12/04 Javascript
jquery dataview数据视图插件使用方法
2016/12/23 Javascript
js仿百度音乐全选操作
2017/01/13 Javascript
关于微信小程序登录的那些事
2019/01/08 Javascript
基于layui内置模块(element常用元素的操作)
2019/09/20 Javascript
js实现缓动动画
2020/11/25 Javascript
vue项目中企业微信使用js-sdk时config和agentConfig配置方式详解
2020/12/15 Vue.js
JavaScript实现切换多张图片
2021/01/27 Javascript
[00:08]DOTA2勇士令状等级奖励“天外飞星”
2019/05/24 DOTA
python安装教程 Pycharm安装详细教程
2017/05/02 Python
pandas groupby 分组取每组的前几行记录方法
2018/04/20 Python
Python3中详解fabfile的编写
2018/06/24 Python
python Flask 装饰器顺序问题解决
2018/08/08 Python
python3 实现一行输入,空格隔开的示例
2018/11/14 Python
对python 多个分隔符split 的实例详解
2018/12/20 Python
python浪漫表白源码
2019/04/05 Python
python实时检测键盘输入函数的示例
2019/07/17 Python
python 并发编程 非阻塞IO模型原理解析
2019/08/20 Python
在线购买世界上最好的酒:BoozeBud
2018/06/07 全球购物
澳大利亚领先的孕妇服装品牌:Mamaway
2018/08/14 全球购物
几道数据库的概念性面试题
2014/05/30 面试题
四川internet信息高速公路(C#)笔试题
2012/02/29 面试题
中专生自荐信
2013/10/12 职场文书
社区端午节活动方案
2014/01/28 职场文书
《乌鸦喝水》教学反思
2016/02/19 职场文书
留学文书中的个人陈述,应该注意哪些问题?
2019/08/23 职场文书
Python中常见的导入方式总结
2021/05/06 Python