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 相关文章推荐
JavaScript基本概念初级讲解论坛贴的学习记录
Feb 22 Javascript
网易JS面试题与Javascript词法作用域说明
Nov 09 Javascript
js批量设置样式的三种方法不推荐使用with
Feb 25 Javascript
jQuery中阻止冒泡事件的方法介绍
Apr 12 Javascript
jQuery使用height()获取高度需要注意的地方
Dec 13 Javascript
JavaScript中DOM详解
Apr 13 Javascript
Node.js实现JS文件合并小工具
Feb 02 Javascript
基于javascript实现数字英文验证码
Jan 25 Javascript
浅析jsopn跨域请求原理及cors(跨域资源共享)的完美解决方法
Feb 06 Javascript
浅析vue插槽和作用域插槽的理解
Apr 22 Javascript
微信小程序扫描二维码获取信息实例详解
May 07 Javascript
解决ant Design中Select设置initialValue时的大坑
Oct 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获取url字符串截取路径的文件名和扩展名的函数
2010/01/22 PHP
浅析php中抽象类和接口的概念以及区别
2013/06/27 PHP
正确的PHP匹配UTF-8中文的正则表达式
2015/05/13 PHP
解决laravel上传图片之后,目录有图片,但是访问不到(404)的问题
2019/10/14 PHP
Prototype 学习 工具函数学习($方法)
2009/07/12 Javascript
基于javascript实现随机颜色变化效果
2016/01/14 Javascript
jQuery插件datatables使用教程
2016/04/21 Javascript
Vue.js每天必学之过渡与动画
2016/09/06 Javascript
JS实现图片放大缩小的方法
2017/02/15 Javascript
element-ui 的el-button组件中添加自定义颜色和图标的实现方法
2018/10/26 Javascript
微信小程序-form表单提交代码实例
2019/04/29 Javascript
深入理解JS异步编程-Promise
2019/06/03 Javascript
微信小程序如何加载数据库真实数据的实现
2020/03/04 Javascript
Python写的一个简单监控系统
2015/06/19 Python
Python字符串转换成浮点数函数分享
2015/07/24 Python
Python脚本实现自动发带图的微博
2016/04/27 Python
老生常谈进程线程协程那些事儿
2017/07/24 Python
Python针对给定字符串求解所有子序列是否为回文序列的方法
2018/04/21 Python
python获取文件真实链接的方法,针对于302返回码
2018/05/14 Python
Python运维之获取系统CPU信息的实现方法
2018/06/11 Python
python基础知识(一)变量与简单数据类型详解
2019/04/17 Python
Pytorch之parameters的使用
2019/12/31 Python
利用django model save方法对未更改的字段依然进行了保存
2020/03/28 Python
在python下实现word2vec词向量训练与加载实例
2020/06/09 Python
PyTorch之nn.ReLU与F.ReLU的区别介绍
2020/06/27 Python
keras实现VGG16方式(预测一张图片)
2020/07/07 Python
Python函数递归调用实现原理实例解析
2020/08/11 Python
python mock测试的示例
2020/10/19 Python
纯css3显示隐藏一个div特效的具体实现
2014/02/10 HTML / CSS
Maison Lab荷兰:名牌Outlet购物
2018/08/10 全球购物
钳工实习自我鉴定
2013/09/19 职场文书
机械专业毕业生自荐信
2013/11/02 职场文书
岗位职责范本
2013/11/23 职场文书
药品业务员岗位职责
2014/04/17 职场文书
2014年转正工作总结
2014/11/08 职场文书
自主招生自荐信格式范文
2015/03/25 职场文书