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 相关文章推荐
获取任意Html元素与body之间的偏移距离 offsetTop、offsetLeft (For:IE5+ FF1 )[
Dec 22 Javascript
详解jquery uploadify 上传文件
Nov 09 Javascript
javascript新建标签,判断键盘输入,以及判断焦点(示例代码)
Nov 25 Javascript
用html+css+js实现的一个简单的图片切换特效
May 28 Javascript
jQuery中bind()方法用法实例
Jan 19 Javascript
Javascript简单实现面向对象编程继承实例代码
Nov 27 Javascript
浅析JavaScript 箭头函数 generator Date JSON
May 23 Javascript
如何在Angular.JS中接收并下载PDF
Nov 26 Javascript
JavaScript中transform实现数字翻页效果
Mar 08 Javascript
基于vue2.0+vuex的日期选择组件功能实现
Mar 13 Javascript
用react-redux实现react组件之间数据共享的方法
Jun 08 Javascript
微信小程序实现购物车代码实例详解
Aug 29 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 addslashes 函数详细分析说明
2009/06/23 PHP
PHP连接SQLSERVER 注意事项(附dll文件下载)
2012/06/28 PHP
thinkphp3查询mssql数据库乱码解决方法分享
2014/02/11 PHP
使用PHPMailer发送邮件实例
2017/02/15 PHP
非常不错的功能强大代码简单的管理菜单美化版
2008/07/09 Javascript
JavaScript 基于原型的对象(创建、调用)
2009/10/16 Javascript
Jquery 常用方法经典总结
2010/01/28 Javascript
使用jquery自定义鼠标样式满足个性需求
2013/11/05 Javascript
jquery实现类似淘宝星星评分功能实例
2014/09/12 Javascript
js实现感应鼠标图片透明度变化的方法
2015/02/20 Javascript
JS实现表单多文件上传样式美化支持选中文件后删除相关项
2016/09/30 Javascript
JS触摸屏网页版仿app弹窗型滚动列表选择器/日期选择器
2016/10/30 Javascript
微信小程序开发之入门实例教程篇
2017/03/07 Javascript
jQuery实现选中行变色效果(实例讲解)
2017/07/06 jQuery
动态加载、移除js/css文件的示例代码
2018/03/20 Javascript
小程序中使用css var变量(使js可以动态设置css样式属性)
2020/03/31 Javascript
小程序分享链接onShareAppMessage的具体用法
2020/05/22 Javascript
python实现爬虫下载漫画示例
2014/02/16 Python
Python实现的生成自我描述脚本分享(很有意思的程序)
2014/07/18 Python
python的即时标记项目练习笔记
2014/09/18 Python
python 调用win32pai 操作cmd的方法
2017/05/28 Python
人工智能最火编程语言 Python大战Java!
2017/11/13 Python
python编写弹球游戏的实现代码
2018/03/12 Python
Python之批量创建文件的实例讲解
2018/05/10 Python
Python小进度条显示代码
2019/03/05 Python
使用celery和Django处理异步任务的流程分析
2020/02/19 Python
Django form表单与请求的生命周期步骤详解
2020/06/07 Python
多视角3D可旋转的HTML5 Logo动画
2016/03/02 HTML / CSS
Html5跳转到APP指定页面的实现
2020/01/14 HTML / CSS
JDO的含义
2012/11/17 面试题
档案接收函
2014/01/13 职场文书
美丽人生观后感
2015/06/03 职场文书
银行资信证明
2015/06/17 职场文书
安全教育培训制度
2015/08/06 职场文书
60条职场经典语录,总有一条能触动你的心
2019/08/21 职场文书
CSS3通过var()和calc()函数实现动画特效
2021/03/30 HTML / CSS