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 相关文章推荐
style、 currentStyle、 runtimeStyle区别分析
Aug 01 Javascript
Table冻结表头示例代码
Aug 20 Javascript
javascript实例分享---具有立体效果的图片特效
Jun 08 Javascript
jQuery实现按钮点击遮罩加载及处理完后恢复的效果
Jun 07 Javascript
关于json字符串与实体之间的严格验证代码
Nov 10 Javascript
flexslider.js实现移动端轮播
Feb 05 Javascript
Angular 4依赖注入学习教程之简介(一)
Jun 04 Javascript
激动人心的 Angular HttpClient的源码解析
Jul 10 Javascript
浅谈Webpack 是如何加载模块的
May 24 Javascript
vue.js循环radio的实例
Nov 07 Javascript
详解JavaScript中分解数字的三种方法
Jan 05 Javascript
JavaScript严格模式不支持八进制的问题讲解
Nov 07 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的栏目导航程序
2006/10/09 PHP
Fine Uploader文件上传组件应用介绍
2013/01/06 PHP
php模板引擎技术简单实现
2016/03/15 PHP
PHP多进程之pcntl_fork的实例详解
2017/10/15 PHP
兼容IE、FireFox、Chrome等浏览器的xml处理函数js代码
2011/11/30 Javascript
js 手机号码合法性验证代码集合
2012/09/29 Javascript
JQueryEasyUI Layout布局框架的使用
2013/04/08 Javascript
jquery 页眉单行信息滚动显示实现思路及代码
2014/06/26 Javascript
jquery使用animate方法实现控制元素移动
2015/03/27 Javascript
jQuery层动画定位滑动效果的方法
2015/04/30 Javascript
浅谈javascript中执行环境(作用域)与作用域链
2016/12/08 Javascript
node.js报错:Cannot find module 'ejs'的解决办法
2016/12/14 Javascript
AngularJS集合数据遍历显示的实例
2017/12/27 Javascript
完美解决axios在ie下的兼容性问题
2018/03/05 Javascript
webpack 插件html-webpack-plugin的具体使用
2018/04/09 Javascript
axios的拦截请求与响应方法
2018/08/11 Javascript
利用Webpack实现小程序多项目管理的方法
2019/02/25 Javascript
D3.js的基础部分之数组的处理数组的排序和求值(v3版本)
2019/05/09 Javascript
[01:03:36]Ti4 循环赛第三日DK vs Titan
2014/07/12 DOTA
Windows下安装python2和python3多版本教程
2017/03/30 Python
Python创建对称矩阵的方法示例【基于numpy模块】
2017/10/12 Python
利用nohup来开启python文件的方法
2019/01/14 Python
python 魔法函数实例及解析
2019/09/25 Python
python中的对数log函数表示及用法
2020/12/09 Python
css3 box-sizing属性使用参考指南
2013/01/08 HTML / CSS
HTML如何让IMG自动适应DIV容器大小的实现方法
2020/02/25 HTML / CSS
梅西酒窖:Macy’s Wine Cellar
2018/01/07 全球购物
致共产党员倡议书
2014/04/16 职场文书
化学工程专业求职信
2014/08/10 职场文书
2014年行政部工作总结
2014/11/19 职场文书
初中重阳节活动总结
2015/05/05 职场文书
高考满分作文赏析(2篇)
2019/08/12 职场文书
详细总结Python常见的安全问题
2021/05/21 Python
SQL写法--行行比较
2021/08/23 SQL Server
使用 Apache 反向代理的设置技巧
2022/01/18 Servers
交互式可视化js库gojs使用介绍及技巧
2022/02/18 Javascript