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 相关文章推荐
Packer 3.0 JS压缩及混淆工具 下载
May 03 Javascript
JQUERY 获取IFrame中对象及获取其父窗口中对象示例
Aug 19 Javascript
javascript删除字符串最后一个字符
Jan 14 Javascript
JS实现div居中示例
Apr 17 Javascript
JS获得浏览器版本和操作系统版本的例子
May 13 Javascript
JS实现超过长度限制后自动跳转下一款文本框的方法
Feb 23 Javascript
javascript中利用柯里化函数实现bind方法
Apr 29 Javascript
Web性能优化系列 10个提升JavaScript性能的技巧
Sep 27 Javascript
JS弹出窗口的运用与技巧大全
Nov 01 Javascript
微信小程序 安全包括(框架、功能模块、账户使用)详解
Jan 16 Javascript
微信小程序实现的贪吃蛇游戏【附源码下载】
Jan 03 Javascript
微信小程序canvas绘制圆角base64图片的实现
Aug 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
Apache下禁止php文件被直接访问的解决方案
2013/04/25 PHP
php中curl和file_get_content的区别
2014/05/10 PHP
PHP @ at 记号的作用示例介绍
2014/10/10 PHP
PHP实现自动对图片进行滚动显示的方法
2015/03/12 PHP
Yii2 输出xml格式数据的方法
2016/05/03 PHP
如何离线执行php任务
2017/02/21 PHP
超级强大的表单验证
2006/06/26 Javascript
JS启动应用程序的一个简单例子
2008/05/11 Javascript
extjs 列表框(multiselect)的动态添加列表项的方法
2009/07/31 Javascript
阻止子元素继承父元素事件具体思路及实现
2013/05/02 Javascript
获取数组中最大最小值方法js代码(自写)
2013/08/12 Javascript
深入理解JavaScript系列(49):Function模式(上篇)
2015/03/04 Javascript
详解JavaScript基于面向对象之继承实例
2015/12/16 Javascript
js面向对象编程总结
2017/02/16 Javascript
在vue-cli脚手架中配置一个vue-router前端路由
2017/07/03 Javascript
解决nodejs的npm命令无反应的问题
2018/05/17 NodeJs
微信小程序使用字体图标的方法
2019/05/23 Javascript
JavaScript利用键盘码控制div移动
2020/03/19 Javascript
Vue+Element ui 根据后台返回数据设置动态表头操作
2020/09/21 Javascript
[01:37]PWL S2开团时刻DAY1&2——这符有毒
2020/11/20 DOTA
Python基于回溯法子集树模板解决最佳作业调度问题示例
2017/09/08 Python
浅谈Python反射 & 单例模式
2019/03/21 Python
Python批量查询关键词微信指数实例方法
2019/06/27 Python
django-allauth入门学习和使用详解
2019/07/03 Python
python中类的输出或类的实例输出为这种形式的原因
2019/08/12 Python
python程序如何进行保存
2020/07/03 Python
Python加速程序运行的方法
2020/07/29 Python
基于PyTorch中view的用法说明
2021/03/03 Python
美国珠宝网上商店:Jeulia
2016/09/01 全球购物
世界顶级足球门票网站:Live Football Tickets
2017/10/14 全球购物
Fabletics官网:美国运动服饰品牌,由好莱坞女演员凯特·哈德森创立
2019/10/19 全球购物
自动化专业职业生涯规划书范文
2014/01/16 职场文书
2014年医院个人工作总结
2014/12/09 职场文书
会计入职心得体会
2016/01/22 职场文书
一文弄懂MySQL中redo log与binlog的区别
2022/02/15 MySQL
Linux中各个目录的作用与内容
2022/06/28 Servers