参考
终于来到我们熟悉的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对象
