参考
终于来到我们熟悉的async函数🌶,这是目前异步编程的终极解决方案
1.async函数定义
一句话:async函数就是Generator函数的语法糖。
Generator函数实现文件读取
var fs = require('fs');
// promise化
var readFile = function (fileName){
return new Promise(function (resolve, reject){
fs.readFile(fileName, function(error, data){
if (error) reject(error);
resolve(data);
});
});
};
var gen = function* (){
var f1 = yield readFile('/etc/fstab');
var f2 = yield readFile('/etc/shells');
console.log(f1.toString());
console.log(f2.toString());
};
// 手动执行
var g = gen()
g.next().value.then(data => {
g.next(data).value.then(data => {
...
})
})
反观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());
};
// 直接调用执行
asyncReadFile();
2.async函数优点
- 内置执行器,不需要额外使用co这样的执行器
- 语义化,async和await 相较于 *和yield 更加语义化
- 更广的适用性,async函数支持原始数据类型。yield后面只能是Thunk函数或者Promise对象