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 相关文章推荐
背景音乐每次刷新都可以自动更换
Feb 01 Javascript
JavaScript判断两种格式的输入日期的正确性的代码
Mar 25 Javascript
jQuery的三种$()
Dec 30 Javascript
javascript对数组的常用操作代码 数组方法总汇
Jan 27 Javascript
javascript为按钮注册回车事件(设置默认按钮)的方法
May 09 Javascript
jQuery插件实现带圆点的焦点图片轮播切换
Jan 18 Javascript
Node.JS利用PhantomJs抓取网页入门教程
May 19 Javascript
Vue实现active点击切换方法
Mar 16 Javascript
js canvas实现画图、滤镜效果
Nov 27 Javascript
在Vue中用canvas实现二维码和图片合成海报的方法
Jun 10 Javascript
原生JS实现相邻月份日历
Oct 13 Javascript
JS highcharts实现动态曲线代码示例
Oct 16 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和ACCESS写聊天室(十)
2006/10/09 PHP
PhpMyAdmin中无法导入sql文件的解决办法
2010/01/08 PHP
php定时删除文件夹下文件(清理缓存文件)
2013/01/23 PHP
PHP 函数call_user_func和call_user_func_array用法详解
2014/03/02 PHP
PHP中绘制图像的一些函数总结
2014/11/19 PHP
分享常见的几种页面静态化的方法
2015/01/08 PHP
Js 获取当前日期时间及其它操作实现代码
2021/03/04 Javascript
javascript 传统事件模型构造的事件监听器实现代码
2010/05/31 Javascript
基于JQuery的简单实现折叠菜单代码
2010/09/15 Javascript
javascript中onmouse事件在div中失效问题的解决方法
2012/01/09 Javascript
jquery增加时编辑jqGrid(实例代码)
2013/11/08 Javascript
多个$(document).ready()的执行顺序实例分析
2014/07/26 Javascript
jquery实现页面虚拟键盘特效
2015/08/08 Javascript
javascript先序遍历DOM树的方法
2016/02/27 Javascript
jQuery封装的屏幕居中提示信息代码
2016/06/08 Javascript
AngularJS基础 ng-mousemove 指令简单示例
2016/08/02 Javascript
JQuery实现文字无缝滚动效果示例代码(Marquee插件)
2017/03/07 Javascript
Vue.Js中的$watch()方法总结
2017/03/23 Javascript
JavaScript实现反转字符串的方法详解
2017/04/27 Javascript
基于javaScript的this指向总结
2017/07/22 Javascript
js禁止表单重复提交
2017/08/29 Javascript
ES6解构赋值实例详解
2017/10/31 Javascript
在一个页面实现两个zTree联动的方法
2017/12/20 Javascript
对angularJs中自定义指令replace的属性详解
2018/10/09 Javascript
浅析python协程相关概念
2018/01/20 Python
python实现随机漫步算法
2018/08/27 Python
Pycharm2017版本设置启动时默认自动打开项目的方法
2018/10/29 Python
CentOS下Python3的安装及创建虚拟环境的方法
2018/11/28 Python
俄罗斯运动、健康和美容产品在线商店:Lactomin.ru
2020/07/23 全球购物
销售总监岗位职责
2014/01/04 职场文书
副总经理党的群众路线教育实践活动个人对照检查材料思想汇报
2014/10/06 职场文书
2014年创卫工作总结
2014/11/24 职场文书
幼儿教师师德师风自我评价
2015/03/05 职场文书
运动会宣传语
2015/07/13 职场文书
2021-4-5课程——SQL Server查询【3】
2021/04/05 SQL Server
MySQL Innodb索引机制详细介绍
2021/11/23 MySQL