JS async 函数的含义和用法实例总结


Posted in Javascript onApril 08, 2020

本文实例讲述了JS async 函数的含义和用法。分享给大家供大家参考,具体如下:

学习老师最后一篇文章并做总结,

前面我们认识了各种异步编程方式:回调函数,Promise对象,Generator函数,

再到两种自动执行方式:Thunk,co

好像我们为了更好的解决异步编程做了很多事情,

但是这也说明了一个问题

就是目前仍是的异步编程都有或多或少的问题,才导致我们要找对应的解决方案

今天我们仍是最后的大招:async

这个关键字在哪里见到来着?

我们可以给script标签添加 async 属性来异步执行脚本。

ajax 可以通过配置 async 来设置同步/异步请求

今天我们仍是一种新的使用方式: async 函数

还是参考前面读取文件的例子:

var gen = function* (){
 var f1 = yield readFile('/etc/fstab');
 var f2 = yield readFile('/etc/shells');
 console.log(f1.toString());
 console.log(f2.toString());
};

我们对他做了两种解决方案, Thunk 和 co

这两种方式需要引入单独的模块,来实现自动执行器。

并且对 yield 的返回结果有严格要求。

async 函数很好的解决了这个问题。

先看看async函数如何实现上面的代码:

var asyncReadFile = async function (){
 var f1 = await readFile('/etc/fstab');
 var f2 = await readFile('/etc/shells');
 console.log(f1.toString());
 console.log(f2.toString());
};

把之前的 * 替换成了 async ,yield 替换成了 await,仅此而已

我们不需要在去写 Thunk 和 co 了,因为 async 自带执行器。

我们也不需要去限制 await 后面的返回值,因为 async 会自己识别,

如果是 Promise 对象就异步处理,原始类型则同步处理

最复杂的两处代码 async 都帮我们实现了。

但是万变不离其宗,再怎么改变,其实内里还是一样的

async 函数其实是将前文里的 Generator 函数和自动执行函数包装在一块

只是减少了我们使用上的复杂度,实际的逻辑一点没少。

使用方式也和之前 co 的使用方式类似。

所以我们最后罗列一下使用async时需要注意的点

  1. await 命令后面的Promise对象可能抛出异常,所以最好catch一下异常
  2. await 命令只能用在async函数内部,用在其他位置会报错
  3. 可以使用Promise.all将任务并发执行

至此,老师的异步编程四部曲就学习完了。

再次声明,本博客内的文章只适用个人学习使用,不允许任何形式的转载,

如需转载,请移步阮一峰老师的博客。

最后附上原文地址:async 函数的含义和用法

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

更多关于JavaScript相关内容可查看本站专题:《JavaScript常用函数技巧汇总》、《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
小议Javascript中的this指针
Mar 18 Javascript
你可能不知道的JavaScript的new Function()方法
Apr 17 Javascript
jQuery常用操作方法及常用函数总结
Jun 19 Javascript
JS实现图片剪裁并预览效果
Aug 12 Javascript
Bootstrap3 内联单选和多选框
Dec 29 Javascript
微信小程序实现多个按钮toggle功能的实例
Jun 13 Javascript
深入理解Vue2.x的虚拟DOM diff原理
Sep 27 Javascript
解决JavaScript layui 下拉框不显示的问题
Aug 14 Javascript
Vue将页面导出为图片或者PDF
Aug 17 Javascript
JS中的一些常用的函数式编程术语
Jun 15 Javascript
解决 window.onload 被覆盖的问题方法
Jan 14 Javascript
JavaScript的function函数详细介绍
Nov 20 Javascript
微信小程序以ssm做后台开发的实现示例
Apr 08 #Javascript
JS co 函数库的含义和用法实例总结
Apr 08 #Javascript
JS Thunk 函数的含义和用法实例总结
Apr 08 #Javascript
JS Generator 函数的含义与用法实例总结
Apr 08 #Javascript
Vue列表循环从指定下标开始的多种解决方案
Apr 08 #Javascript
《javascript设计模式》学习笔记七:Javascript面向对象程序设计组合模式详解
Apr 08 #Javascript
vue开发移动端底部导航条功能
Apr 08 #Javascript
You might like
jQuery为iframe的body添加click事件的实现代码
2011/04/07 Javascript
各浏览器对link标签onload/onreadystatechange事件支持的差异分析
2011/04/27 Javascript
Extjs中使用extend(js继承) 的代码
2012/03/15 Javascript
node.js中的path.normalize方法使用说明
2014/12/08 Javascript
js实现的tab标签切换效果代码分享
2015/08/25 Javascript
JS中对Cookie的操作详解
2016/08/05 Javascript
微信小程序 页面之间传参实例详解
2017/01/13 Javascript
js实现手机拍照上传功能
2017/01/17 Javascript
ES6新特性一: let和const命令详解
2017/04/20 Javascript
简单谈谈require模块化jquery和angular的问题
2017/06/23 jQuery
NodeJS爬虫实例之糗事百科
2017/12/14 NodeJs
js将当前时间格式化为 年-月-日 时:分:秒的实现代码
2018/01/20 Javascript
JavaScript中利用Array filter() 方法压缩稀疏数组
2018/02/24 Javascript
解决layui弹出层layer的area过大被遮挡的问题
2019/09/21 Javascript
layui table表格数据的新增,修改,删除,查询,双击获取行数据方式
2019/11/14 Javascript
使用Python判断质数(素数)的简单方法讲解
2016/05/05 Python
python异常和文件处理机制详解
2016/07/19 Python
解决PyCharm中光标变粗的问题
2017/08/05 Python
Tensorflow卷积神经网络实例进阶
2018/05/24 Python
python删除字符串中指定字符的方法
2018/08/13 Python
ubuntu16.04制作vim和python3的开发环境
2018/09/23 Python
Python将列表数据写入文件(txt, csv,excel)
2019/04/03 Python
python实现植物大战僵尸游戏实例代码
2019/06/10 Python
OpenCV哈里斯(Harris)角点检测的实现
2020/01/15 Python
python自动化unittest yaml使用过程解析
2020/02/03 Python
python pptx复制指定页的ppt教程
2020/02/14 Python
Python列表嵌套常见坑点及解决方案
2020/09/30 Python
python中使用.py配置文件的方法详解
2020/11/23 Python
matplotlib grid()设置网格线外观的实现
2021/02/22 Python
html5 video全屏播放/自动播放的实现示例
2020/08/06 HTML / CSS
世界闻名的衬衫制造商:Savile Row Company
2018/07/30 全球购物
我们的节日国庆活动方案
2014/08/19 职场文书
2014年社区党建工作总结
2014/11/11 职场文书
2015年“七七卢沟桥事变”纪念活动总结
2015/03/24 职场文书
2015年大学生实习评语
2015/03/25 职场文书
2015年药品销售工作总结范文
2015/05/25 职场文书