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 相关文章推荐
js实现在文本框光标处添加字符的方法介绍
Nov 24 Javascript
JavaScript NodeTree导航栏(菜单项JSON类型/自制)
Feb 01 Javascript
Jquery AJAX POST与GET之间的区别
Nov 14 Javascript
javascript实现表格排序 编辑 拖拽 缩放
Jan 02 Javascript
javascript实现当前页导航激活的方法
Feb 27 Javascript
js实现精确到毫秒的倒计时效果
Aug 05 Javascript
纯javascript版日历控件
Nov 24 Javascript
javascript防篡改对象实例详解
Apr 10 Javascript
jquery中封装函数传递当前元素的方法示例
May 05 jQuery
vue实现消息的无缝滚动效果的示例代码
Dec 05 Javascript
vue地区选择组件教程详解
May 04 Javascript
详解swipe使用及竖屏页面滚动方法
Jun 28 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
PHP学习笔记之三 数据库基本操作
2011/01/17 PHP
PHP数组的交集array_intersect(),array_intersect_assoc(),array_inter_key()函数的小问题
2011/05/29 PHP
PHP学习笔记 IIS7下安装配置php环境
2012/10/29 PHP
php通过获取头信息判断图片类型的方法
2015/06/26 PHP
PHP实现的网站目录扫描索引工具
2016/09/08 PHP
php curl批处理实现可控并发异步操作示例
2018/05/09 PHP
prototype Element学习笔记(Element篇三)
2008/10/26 Javascript
5个最佳的Javascript日期处理类库分享
2012/04/15 Javascript
基于jQuery的倒计时实现代码
2012/05/30 Javascript
web的各种前端打印方法之jquery打印插件PrintArea实现网页打印
2013/01/09 Javascript
jquery next nextAll nextUntil siblings的区别介绍
2013/10/05 Javascript
JavaScript实现DIV层拖动及动态增加新层的方法
2015/05/12 Javascript
纯CSS3代码实现滑动开关效果
2015/08/19 Javascript
跟我学习javascript的闭包
2015/11/16 Javascript
js+flash实现的5图变换效果广告代码(附演示与demo源码下载)
2016/04/01 Javascript
两行代码轻松搞定JavaScript日期验证
2016/08/03 Javascript
NodeJs的优势和适合开发的程序
2016/08/14 NodeJs
AngularJs表单验证实例代码解析
2016/11/29 Javascript
简单实现AngularJS轮播图效果
2020/04/10 Javascript
Vue中的无限加载vue-infinite-loading的方法
2018/04/08 Javascript
js动态设置select下拉菜单的默认选中项实例
2018/08/21 Javascript
微信小程序wxml列表渲染原理解析
2019/11/27 Javascript
[01:10]DOTA2次级职业联赛 - EP战队宣传片
2014/12/01 DOTA
python3对接mysql数据库实例详解
2019/04/30 Python
python调用自定义函数的实例操作
2019/06/26 Python
pyqt5、qtdesigner安装和环境设置教程
2019/09/25 Python
python和php学习哪个更有发展
2020/06/17 Python
matplotlib subplot绘制多个子图的方法示例
2020/07/28 Python
Django生成数据库及添加用户报错解决方案
2020/10/09 Python
CSS中几个与换行有关的属性简明总结
2014/04/15 HTML / CSS
用HTML5的canvas实现一个炫酷时钟效果
2016/05/20 HTML / CSS
英国时尚高尔夫服装购物网站:Trendy Golf
2020/01/10 全球购物
个人收入证明模板
2014/09/18 职场文书
关于元旦的广播稿2016
2015/12/17 职场文书
Redis集群节点通信过程/原理流程分析
2022/03/18 Redis
浅谈音视频 pts dts基本概念及理解
2022/08/05 数码科技