初识async函数
为什么会出现async函数
首先从大的方面来说,出现async函数时为了解决JS编程中的异步操作,再往具体说就是为了对以往异步编程方法的一种改进,也有人说仅仅只是Generator 函数的语法糖,这个我暂时还没理解到那个程度,因为我对Generator还是一知半解,等理解透一些了会专门写篇文章记录一下的。回到async函数,它算是阶段性的解决了异步编程的问题,也就是说让我们无限接近了异步编程的最高境界,就是不用关心它是不是异步,一切都是同步编程的写法,那样可读性就很强了。
什么是async函数
async函数是ES2017标准新引入的,使得异步操作变得更加方便。例如在nodejs中使用async函数读取两个文件,可以这样
const fs = require('fs');
const asyncReadFile = async function () {
const f1 = await readFile('/etc/fstab');
const f2 = await readFile('/etc/shells');
console.log(f1.toString());
console.log(f2.toString());
};
async函数实际上就是对Generator函数的改进,体现在以下四点。
- 内置执行器
- 也就是说async函数可以像普通函数那样一行直接执行
- 更好的语义
- 这个基本上来说就是async里面包的是异步操作,而await得到的就是异步操作的结果
- 返回值是 Promise
- async函数的返回值是 Promise 对象,这比 Generator 函数的返回值是 Iterator 对象方便多了。你可以用then方法指定下一步的操作。
简单用法和使用感受
- 简单用法
- async函数里面包含的一个异步操作,而异步操作结果则由await接收,这个返回值是一个promise对象,所以就有可能成功或者失败,所以最好是做一些错误处理,一般使用try..catch
async function myFunction() {
try {
await somethingThatReturnsAPromise();
} catch (err) {
console.log(err);
}
}
- 还有一点,await 命令只能用在 async 函数之中,如果用在普通函数,就会报错。
- 如果确实希望多个请求并发执行,可以使用 Promise.all 方法。,这个暂时还没试过
- 因为最近换了工作,公司技术栈就就大量的使用了async函数,就最近几天的使用下来,最大的感受就是代码确实更好理解了,毕竟相当于用同步的语法在写异步代码了,至于其他深入的用法还在探索中,在后续的使用中还有什么别的心得与体会还是持续更新,文中有什么理解不到位的,欢迎留言讨论!
- 还有一点体会就是:无论是新技术还是老技术,不在实际项目中用一下的话永远只会存在自己的记忆深处!像这个async函数之前就在阮一峰老师的es6教程中看过,可是看过归看过竟然再次看到时都没什么印象了,所以新的技术还是要用的,不用光看看的话永远只是一个看客,努力实践吧,哈哈,就这样!
参考文章:http://es6.ruanyifeng.com/#docs/async
初识async函数的更多相关文章
- JS异步操作新体验之 async函数
1.初识 async 函数 ES6中提供了两个很好的解决异步操作的方案 Promise 和 Generator,ES2017标准中引入的 async 函数就是建立在 Promise 和 Gener ...
- async 函数学习笔记
async函数就是Generator函数的语法糖. var fs = require('fs'); var readFile = function (fileName) { return new Pr ...
- C# 5.0 Async函数的提示和技巧
一.创建Async函数 Async是C# 5.0中新增的关键字,通过语法糖的形式简化异步编程,它有如下三种方式: async Task<T> MyReturningMethod { ret ...
- async 函数
同步 console.log(1); console.log(2); console.log(3); console.log(4); //异步 ajax 文件读取io操作 console.log(1) ...
- ECMAScript 6 学习(二)async函数
1.什么是async函数 2.用法 2.1基本用法 3.语法 3.1返回promise对象 3.2promise状态的变化 3.3await命令 1.什么是async函数 async函数也是异步编程 ...
- ES2017中的async函数
前面的话 ES2017标准引入了 async 函数,使得异步操作变得更加方便.本文将详细介绍async函数 概述 async 函数是 Generator 函数的语法糖 使用Generator 函数,依 ...
- async函数解析
转载请注明出处:async函数解析 async函数是基于Generator函数实现的,也就是说是Generator函数的语法糖.在之前的文章有介绍过Generator函数语法和异步应用,如果对其不了解 ...
- 如何更好的编写async函数
2018年已经到了5月份,node的4.x版本也已经停止了维护 我司的某个服务也已经切到了8.x,目前正在做koa2.x的迁移 将之前的generator全部替换为async 但是,在替换的过程中,发 ...
- es6学习笔记-async函数
1 前情摘要 前段时间时间进行项目开发,需求安排不是很合理,导致一直高强度的加班工作,这一个月不是常说的996,简直是936,还好熬过来了.在此期间不是刚学会了es6的promise,在项目有用到pr ...
随机推荐
- 一步一步学EF系列二【Fluent API的方式来处理实体与数据表之间的映射关系】
EF里面的默认配置有两个方法,一个是用Data Annotations(在命名空间System.ComponentModel.DataAnnotations;),直接作用于类的属性上面,还有一个就是F ...
- webpack打包静态资源和动态资源
1.对于静态引用的资源: <img src = "static/modelname/imgname.png"> // 修改为下面的写法 <img src = &q ...
- H5 动画:轨迹移动 | H5游戏 推金币
https://aotu.io/notes/2017/11/06/path-animation/ https://aotu.io/notes/2017/11/06/coindozer/
- 查看ubuntu 各系统的内核版本
1.查看ubuntu版本号: cat /etc/issue 返回结果: Ubuntu 16.04.2 LTS \n \l 2.查看内核版本号: cat /proc/version 返回结 ...
- Flash Builder4注册机
我的Eclipse下的Flash Builder 4正式版已经过期,之前在网上找到的注册码,都不能用了, 花了很久时间,才找到这个注册机. Flash Builder 4 注册机 Serial Cra ...
- Python3.x:报错POST data should be bytes, an iterable of bytes
Python3.x:报错POST data should be bytes, an iterable of bytes 问题: python3.x:报错 POST data should be byt ...
- [Linux 005]——IO重定向
通常在 Shell 中执行命令的时候,我们会在输入命令的下方看到执行结果,操作系统默认将命令的执行结果输出到显示器上.当然,我们也可以手动的指定输出路径,或者输入路径,这就是 I/O 重定向. 1.标 ...
- 20145331《Java程序设计》课程总结
20145331<Java程序设计>课程总结 每周读书笔记链接汇总 •20145331<Java程序设计>第一周学习总结 •20145331<Java程序设计>第二 ...
- linux系统调用是通过软中断实现的吗
软中断是利用硬件中断的概念,用软件方式进行模拟,实现宏观上的异步执行效果.很多情况下,软中断和信号有些类似,同时,软中断又是和硬中断相对应的,硬中断是外部设备对CPU的中断,软中断通常是硬中断服务程序 ...
- 简单的Sqlite使用方法
Sqlite的作用不言而喻,就是帮助开发者建立本地数据库,存储一些基本信息.不做过多阐述,需要的深入了解的可以找度娘,本文是针对Sqlite小白在使用上提供一些实例. 一.导入Sqlite.swift ...