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实现多域名不同文件的调用方法
Jan 12 Javascript
jquery ajax的success回调函数中实现按钮置灰倒计时
Nov 19 Javascript
jquery选择符快速提取web表单数据示例
Mar 27 Javascript
JS数组排序技巧汇总(冒泡、sort、快速、希尔等排序)
Nov 24 Javascript
JavaScript学习笔记之检测客户端类型是(引擎、浏览器、平台、操作系统、移动设备)
Dec 03 Javascript
深入浅出ES6之let和const命令
Aug 25 Javascript
微信公众平台开发教程(四) 实例入门:机器人回复(附源码)
Dec 02 Javascript
详解Vue.js Mixins 混入使用
Sep 15 Javascript
vue项目开发中setTimeout等定时器的管理问题
Sep 13 Javascript
Vue 组件注册实例详解
Feb 23 Javascript
高性能js数组去重(12种方法,史上最全)
Dec 21 Javascript
vue设置全局访问接口API地址操作
Aug 14 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
中英文字符串翻转函数
2008/12/09 PHP
PHP实现PDO的mysql数据库操作类
2014/12/12 PHP
php+mysql数据库查询实例
2015/01/21 PHP
php查询mysql大量数据造成内存不足的解决方法
2015/03/04 PHP
php基于mcrypt_encrypt和mcrypt_decrypt实现字符串加密解密的方法
2016/07/12 PHP
javascript 动态修改样式和层叠样式表代码
2010/04/27 Javascript
javascript 面向对象的JavaScript类
2010/05/04 Javascript
jQuery下通过$.browser来判断浏览器.
2011/04/05 Javascript
javascript自然分类法算法实现代码
2013/10/11 Javascript
AngularJS入门教程(零):引导程序
2014/12/06 Javascript
jQuery中:empty选择器用法实例
2014/12/30 Javascript
JQuery控制Radio选中方法分析
2015/05/29 Javascript
同步文本框内容JS代码实现
2016/08/04 Javascript
webpack-dev-server自动更新页面方法
2018/02/22 Javascript
解决vue处理axios post请求传参的问题
2018/03/05 Javascript
仿vue-cli搭建属于自己的脚手架的方法步骤
2019/04/17 Javascript
用Vue编写抽象组件的方法
2019/05/06 Javascript
详解Vue中的基本语法和常用指令
2019/07/23 Javascript
JavaScript Dom 绑定事件操作实例详解
2019/10/02 Javascript
Openlayers学习之加载鹰眼控件
2020/09/28 Javascript
[46:00]Ti4 冒泡赛第二轮LGD vs C9 2
2014/07/14 DOTA
[41:11]完美世界DOTA2联赛PWL S2 Inki vs Magma 第一场 11.22
2020/11/24 DOTA
[59:35]DOTA2-DPC中国联赛定级赛 Aster vs DLG BO3第一场 1月8日
2021/03/11 DOTA
python算法表示概念扫盲教程
2017/04/13 Python
Django自关联实现多级联动查询实例
2020/05/19 Python
Python 求向量的余弦值操作
2021/03/04 Python
美国领先的家居装饰和礼品商店:Kirkland’s
2017/01/30 全球购物
伊芙丽官方旗舰店:中国淑女一线品牌
2017/12/01 全球购物
《李广射虎》教学反思
2014/04/27 职场文书
财务情况说明书范文
2014/05/06 职场文书
课外活动总结范文
2014/07/09 职场文书
交通安全横幅标语
2014/10/07 职场文书
入党培养人考察意见
2015/06/08 职场文书
2019财务毕业实习报告
2019/06/27 职场文书
教你用Python写一个植物大战僵尸小游戏
2021/04/25 Python
JS前端轻量fabric.js系列物体基类
2022/08/05 Javascript