您的位置:首页 > Web前端 > JavaScript

ECMAScript 6 学习笔记----异步操作和Async函数

2016-10-10 22:49 232 查看
1.基本概念

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 入门----阮一峰
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息