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 相关文章推荐
jQuery 解析xml文件
Aug 09 Javascript
JavaScript 学习技巧
Feb 17 Javascript
juqery 学习之三 选择器 子元素与表单
Nov 25 Javascript
innerText 使用示例
Jan 23 Javascript
js获取url中"?"后面的字串方法
May 15 Javascript
PHP中CURL的几个经典应用实例
Jan 23 Javascript
jquery实现页面关键词高亮显示的方法
Mar 12 Javascript
基于JQuery和CSS3实现仿Apple TV海报背景视觉差特效源码分享
Sep 21 Javascript
浅析jquery与checkbox的checked属性的问题
Apr 27 Javascript
css和js实现弹出登录居中界面完整代码
Nov 26 Javascript
VUE实现可随意拖动的弹窗组件
Sep 25 Javascript
JavaScript遍历数组的三种方法map、forEach与filter实例详解
Feb 27 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和js交互一例-PHP教程,PHP应用
2007/01/03 PHP
PHP4和PHP5版本下解析XML文档的操作方法实例分析
2017/05/20 PHP
学习ExtJS border布局
2009/10/08 Javascript
为EasyUI的Tab标签添加右键菜单的方法
2012/07/14 Javascript
Javascript开发之三数组对象实例介绍
2012/11/12 Javascript
jQuery实现form表单reset按钮重置清空表单功能
2012/12/18 Javascript
caller和callee的区别介绍及演示结果
2013/03/10 Javascript
JS控制阿拉伯数字转为中文大写示例代码
2013/09/04 Javascript
详解jquery validate实现表单验证 (正则表达式)
2017/01/18 Javascript
AngularJS2中一种button切换效果的实现方法(二)
2017/03/27 Javascript
jquery ui sortable拖拽后保存位置
2017/04/27 jQuery
angularjs 页面自适应高度的方法
2018/01/17 Javascript
[01:36:57]【09DOTA2第一视角】小骷髅
2014/04/16 DOTA
[03:22]DAC最前线(第二期)—DOTA2亚洲邀请赛主赛场周边及线路探访
2015/01/24 DOTA
[01:14:55]EG vs Spirit Supermajor 败者组 BO3 第三场 6.4
2018/06/05 DOTA
python中使用mysql数据库详细介绍
2015/03/27 Python
实例解析Python的Twisted框架中Deferred对象的用法
2016/05/25 Python
Python日期的加减等操作的示例
2017/08/15 Python
Python-OpenCV基本操作方法详解
2018/04/02 Python
pandas将DataFrame的列变成行索引的方法
2018/04/10 Python
Python正则表达式和元字符详解
2018/11/29 Python
Python实现截取PDF文件中的几页代码实例
2019/03/11 Python
Django的性能优化实现解析
2019/07/30 Python
python-sys.stdout作为默认函数参数的实现
2020/02/21 Python
什么是python的必选参数
2020/06/21 Python
值得收藏的HTML5资源(学习html5的朋友可以收藏下)
2010/07/20 HTML / CSS
前端实现打印图像功能
2019/08/27 HTML / CSS
Yves Rocher伊夫·黎雪美国官网:法国始创植物美肌1959
2019/01/09 全球购物
母亲节演讲稿范文
2014/01/02 职场文书
小学岗位竞聘方案
2014/01/22 职场文书
招商专员岗位职责
2014/02/08 职场文书
金融管理专业求职信
2014/07/10 职场文书
员工生日活动方案
2014/08/24 职场文书
高中生毕业评语
2014/12/30 职场文书
JavaScript 语句之常用 for 循环详解
2021/03/29 Javascript
PHP 时间处理类Carbon
2022/05/20 PHP