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 相关文章推荐
漂亮的widgets,支持换肤和后期开发新皮肤(2007-4-27已更新1.7alpha)
Apr 27 Javascript
ExtJs之带图片的下拉列表框插件
Mar 04 Javascript
JavaScript原型继承之基础机制分析
Aug 26 Javascript
使用js判断TextBox控件值改变然后出发事件
Mar 07 Javascript
javascript 获取函数形参个数
Jul 31 Javascript
Javascript基础教程之数据类型 (布尔型 Boolean)
Jan 18 Javascript
Bootstrap菜单按钮及导航实例解析
Sep 09 Javascript
Node.js获取前端ajax提交的request信息
Feb 20 Javascript
js从输入框读取内容,比较两个数字的大小方法
Mar 13 Javascript
Vue AST源码解析第一篇
Jul 19 Javascript
解决vue同一slot在组件中渲染多次的问题
Sep 06 Javascript
利用React高阶组件实现一个面包屑导航的示例
Aug 23 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
如何在smarty中增加类似foreach的功能自动加载数据
2013/06/26 PHP
PHP生成验证码时“图像因其本身有错无法显示”的解决方法
2013/08/07 PHP
PHP中VC6、VC9、TS、NTS版本的区别与用法详解
2013/10/26 PHP
php几个预定义变量$_SERVER用法小结
2014/11/07 PHP
laravel 中某一字段自增、自减的例子
2019/10/11 PHP
jquery图片上下tab切换效果
2011/03/18 Javascript
利用js动态添加删除table行的示例代码
2013/12/16 Javascript
JavaScript解析json格式数据简单示例
2014/12/09 Javascript
javascript中$(function() {});写与不写有哪些区别
2015/08/10 Javascript
理解Angular数据双向绑定
2016/01/10 Javascript
浅析angularJS中的ui-router和ng-grid模块
2016/05/20 Javascript
每日十条JavaScript经验技巧(一)
2016/06/23 Javascript
AngularJS 应用身份认证的技巧总结
2016/11/07 Javascript
Javascript this 函数深入详解
2016/12/13 Javascript
微信小程序 Button 组件详解及简单实例
2017/01/10 Javascript
jQuery弹出层插件popShow用法示例
2017/01/23 Javascript
javascript 中的继承实例详解
2017/05/05 Javascript
nodejs制作爬虫实现批量下载图片
2017/05/19 NodeJs
vue2.0 资源文件assets和static的区别详解
2018/04/08 Javascript
微信小程序实现复选框效果
2018/12/28 Javascript
Nodejs 识别图片类型的方法
2019/08/15 NodeJs
详解JS深拷贝与浅拷贝
2020/08/04 Javascript
[11:12]2018DOTA2国际邀请赛寻真——绿色长城OpTic
2018/08/10 DOTA
python字符串连接的N种方式总结
2014/09/17 Python
Java中重定向输出流实现用文件记录程序日志
2015/06/12 Python
python对excel文档去重及求和的实例
2018/04/18 Python
python隐藏终端执行cmd命令的方法
2019/06/24 Python
解决Django一个表单对应多个按钮的问题
2019/07/18 Python
Pytorch基本变量类型FloatTensor与Variable用法
2020/01/08 Python
PyCharm汉化安装及永久激活详细教程(靠谱)
2020/01/16 Python
法务专员岗位职责
2014/01/02 职场文书
主办会计岗位职责
2014/03/13 职场文书
质量承诺书怎么写
2014/05/24 职场文书
社区维稳工作方案
2014/06/06 职场文书
法院个人总结
2015/03/03 职场文书
SpringDataJPA实体类关系映射配置方式
2021/12/06 Java/Android