ECMAScript 6 学习笔记----异步操作和Async函数
2016-10-10 22:49
232 查看
1.基本概念
Javascript语言的执行环境是“单线程”的,如果没有异步编程,根本没法用,非卡死不可。
ES6诞生以前,异步编程的方法,大概有下面四种。
回调函数
事件监听
发布/订阅
Promise 对象
ES6将JavaScript异步编程带入了一个全新的阶段,ES7的
回调函数
JavaScript语言对异步编程的实现,就是回调函数。所谓回调函数,就是把任务的第二段单独写在一个函数里面,等到重新执行这个任务的时候,就直接调用这个函数。它的英语名字callback,直译过来就是"重新调用"。
读取文件进行处理,是这样写的。
一个有趣的问题是,为什么Node.js约定,回调函数的第一个参数,必须是错误对象err(如果没有错误,该参数就是null)?原因是执行分成两段,在这两段之间抛出的错误,程序无法捕捉,只能当作参数,传入第二段。
Promise对象
回调函数本身并没有问题,它的问题出现在多个回调函数嵌套。这是代码的可读性就很差了,Promise将回调函数的嵌套,改成链式调用
async函数
ES7提供了
下面的例子读取两个文件
学习文档:ECMAScript 入门----阮一峰
Javascript语言的执行环境是“单线程”的,如果没有异步编程,根本没法用,非卡死不可。
ES6诞生以前,异步编程的方法,大概有下面四种。
回调函数
事件监听
发布/订阅
Promise 对象
ES6将JavaScript异步编程带入了一个全新的阶段,ES7的
Async函数更是提出了异步编程的终极解决方案。
回调函数
JavaScript语言对异步编程的实现,就是回调函数。所谓回调函数,就是把任务的第二段单独写在一个函数里面,等到重新执行这个任务的时候,就直接调用这个函数。它的英语名字callback,直译过来就是"重新调用"。
读取文件进行处理,是这样写的。
fs.readFile('/etc/passwd', function (err, data) { if (err) throw err; console.log(data); });
一个有趣的问题是,为什么Node.js约定,回调函数的第一个参数,必须是错误对象err(如果没有错误,该参数就是null)?原因是执行分成两段,在这两段之间抛出的错误,程序无法捕捉,只能当作参数,传入第二段。
Promise对象
回调函数本身并没有问题,它的问题出现在多个回调函数嵌套。这是代码的可读性就很差了,Promise将回调函数的嵌套,改成链式调用
async函数
ES7提供了
async函数,使得异步操作变得更加方便。
async函数是什么?一句话,
async函数就是Generator函数的语法糖。
下面的例子读取两个文件
var asyncReadFile = async function (){ var f1 = await readFile('/etc/fstab'); var f2 = await readFile('/etc/shells'); console.log(f1.toString()); console.log(f2.toString()); };
学习文档:ECMAScript 入门----阮一峰
相关文章推荐
- ES6学习15(异步操作和Async函数)
- python学习笔记: 一些有用的文件操作函数
- Java学习笔记35:Java常用字符串操作函数
- 学习thinkPHP 笔记(1)————————数据库操作 自写函数getbaseWhere() 和 where等操作
- ECMAScript 6 学习笔记----函数的扩展
- SAS学习笔记:字符串操作函数
- Delphi的学习笔记八——内存操作函数
- Windows 8学习笔记(二十一)--C++ 文件异步操作
- iOS学习笔记4-GCDAsyncUdpSocket的使用(实现异步发送接收数据)
- Androidx学习笔记(40)--- 使用异步HttpClient(android-async-http-master)做get提交
- Delphi的学习笔记八——内存操作函数
- 2013-7-10学习笔记[字符串操作,指向函数的指针]
- 【Lua学习笔记】 --> 《字符串string与table的函数操作》
- Sharepoint学习笔记—ECMAScript对象模型系列-- 5、使用ECMA操作列表对象(list)
- Java学习笔记35:Java常用字符串操作函数
- .NET异步操作学习之一:Async/Await中异常的处理
- 学习PHP操作MySQL数据库的函数笔记
- OpenCv学习笔记(六)----图像空间缩减,OpenCv中的计时函数和OpenCv中操作图像单个像素点的方法
- jQuery学习笔记(3)-操作jQuery包装集的函数
- Android Async异步操作实例---加载网络图片(慕课网笔记)