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 四则运算精度修正函数代码
May 31 Javascript
js获取触发事件元素在整个网页中的绝对坐标(示例代码)
Dec 13 Javascript
js创建对象的方式总结
Jan 10 Javascript
Nginx上传文件全部缓存解决方案
Aug 17 Javascript
JS实现为排序好的字符串找出重复行的方法
Mar 02 Javascript
JS实现页面跳转参数不丢失的方法
Nov 28 Javascript
微信小程序 form组件详解及简单实例
Jan 10 Javascript
分分钟玩转Vue.js组件(二)
Mar 01 Javascript
javascript用rem来做响应式开发
Jan 13 Javascript
Angular 实现输入框中显示文章标签的实例代码
Nov 07 Javascript
初学node.js中实现删除用户路由
May 27 Javascript
js实现简单的倒计时
Jan 28 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和ACCESS写聊天室(三)
2006/10/09 PHP
PHP中的替代语法简介
2014/08/22 PHP
php读取csv文件并输出的方法
2015/03/14 PHP
PHP实现时间比较和时间差计算的方法示例
2017/07/24 PHP
Centos7安装swoole扩展操作示例
2020/03/26 PHP
javascript拓展DOM操作 prependChild insertAfert
2010/11/17 Javascript
javascript getElementsByTagName
2011/01/31 Javascript
使用JavaScript 实现各种跨域的方法
2013/05/08 Javascript
3种Jquery限制文本框只能输入数字字母的方法
2014/12/03 Javascript
tuzhu_req.js 实现仿百度图片首页效果
2015/08/11 Javascript
基于Node.js实现nodemailer邮件发送
2016/01/26 Javascript
详解vue.js组件化开发实践
2016/12/14 Javascript
javascript DOM的详解及实例代码
2017/03/06 Javascript
简单实现js上传文件功能
2017/08/21 Javascript
利用pm2部署多个node.js项目的配置教程
2017/10/22 Javascript
详解如何使用 vue-cli 开发多页应用
2017/12/16 Javascript
laravel实现中文和英语互相切换的例子
2019/09/30 Javascript
浅谈Vue3 Composition API如何替换Vue Mixins
2020/04/29 Javascript
JS继承实现方法及优缺点详解
2020/09/02 Javascript
手写Vue2.0 数据劫持的示例
2021/03/04 Vue.js
python+matplotlib实现鼠标移动三角形高亮及索引显示
2018/01/15 Python
python实现数据写入excel表格
2018/03/25 Python
python放大图片和画方格实现算法
2018/03/30 Python
python TF-IDF算法实现文本关键词提取
2019/05/29 Python
python PIL和CV对 图片的读取,显示,裁剪,保存实现方法
2019/08/07 Python
Python2和Python3中@abstractmethod使用方法
2020/02/04 Python
关于Python解包知识点总结
2020/05/05 Python
通过代码实例了解Python3编程技巧
2020/10/13 Python
Python实现Kerberos用户的增删改查操作
2020/12/14 Python
Java中实现多态的机制是什么?
2014/12/07 面试题
护理学专业推荐信
2013/12/03 职场文书
国庆节文艺活动方案
2014/02/03 职场文书
差生评语大全
2014/05/04 职场文书
民政局个人整改措施
2014/09/24 职场文书
亮剑观后感500字
2015/06/05 职场文书
Jackson 反序列化时实现大小写不敏感设置
2021/06/29 Java/Android