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中:password选择器用法实例
Jan 03 Javascript
jQuery中insertBefore()方法用法实例
Jan 08 Javascript
jQuery 3.0十大新特性最终版发布
Jul 14 Javascript
Vue.js系列之vue-router(上)(3)
Jan 03 Javascript
easyui 中的datagrid跨页勾选问题的实现方法
Jan 18 Javascript
Bootstrap标签页(Tab)插件使用方法
Mar 21 Javascript
BootStrap Table复选框默认选中功能的实现代码(从数据库获取到对应的状态进行判断是否为选中状态)
Jul 11 Javascript
微信小程序实现action-sheet弹出底部菜单功能【附源码下载】
Dec 09 Javascript
vue组件name的作用小结
May 23 Javascript
微信小程序tabbar底部导航
Nov 05 Javascript
微信小程序如何访问公众号文章
Jul 08 Javascript
vue实现微信浏览器左上角返回按钮拦截功能
Jan 18 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弱类型的安全问题详细总结
2016/09/25 PHP
实例分析PHP中PHPMailer发邮件
2017/12/13 PHP
Yii1.1框架实现PHP极光推送消息通知功能
2018/09/06 PHP
微信公众号实现扫码获取微信用户信息(网页授权)
2019/04/09 PHP
PHP扩展Swoole实现实时异步任务队列示例
2019/04/13 PHP
jQuery中filter(),not(),split()使用方法
2010/07/06 Javascript
图片无缝滚动代码(向左/向下/向上)
2013/04/10 Javascript
JS写的贪吃蛇游戏(个人练习)
2013/07/08 Javascript
jquery固定底网站底部菜单效果
2013/08/13 Javascript
jQuery使用元素属性attr赋值详解
2015/02/27 Javascript
基于javascript实现全屏漂浮广告
2016/03/31 Javascript
基于JS如何实现类似QQ好友头像hover时显示资料卡的效果(推荐)
2016/06/09 Javascript
Bootstrap零基础入门教程(二)
2016/07/18 Javascript
JavaScript SHA-256加密算法详细代码
2016/10/06 Javascript
微信小程序之ES6与事项助手的功能实现
2016/11/30 Javascript
jQuery+ajax的资源回收处理机制分析
2017/01/07 Javascript
VUE实现一个分页组件的示例
2017/09/13 Javascript
使用webpack打包后的vue项目如何正确运行(express)
2018/10/26 Javascript
详解Vue之事件处理
2020/07/10 Javascript
解决nuxt 自定义全局方法,全局属性,全局变量的问题
2020/11/05 Javascript
[38:38]完美世界DOTA2联赛PWL S3 access vs Rebirth 第二场 12.17
2020/12/18 DOTA
使用django-crontab实现定时任务的示例
2018/02/26 Python
Python根据指定日期计算后n天,前n天是哪一天的方法
2018/05/29 Python
python计算两个数的百分比方法
2018/06/29 Python
ubuntu 18.04 安装opencv3.4.5的教程(图解)
2019/11/04 Python
HTML5实现的震撼3D焦点图动画的示例代码
2019/09/26 HTML / CSS
英国信箱在线鲜花速递公司:Bloom & Wild
2019/03/10 全球购物
美国优质宠物用品购买网站:Muttropolis
2020/02/17 全球购物
如何强制垃圾回收
2015/10/06 面试题
初中毕业生的自我评价
2014/03/03 职场文书
学生喝酒检讨书500字
2014/11/02 职场文书
计划生育诚信协议书
2014/11/02 职场文书
工商局个人工作总结
2015/03/03 职场文书
2015年学校党建工作总结
2015/05/19 职场文书
《攀登者》:“海拔8000米以上,你不能指望任何人”
2019/11/25 职场文书
Python连接Postgres/Mysql/Mongo数据库基本操作大全
2021/06/29 Python