含意
ES2017 规范引入了 async
函数,使得异步操作变得更加不便。
async
函数是什么?一句话,它就是 Generator 函数的语法糖。
前文有一个 Generator 函数,顺次读取两个文件。
读取文件进行解决,是这样写的。
const readFile = function (fileName) { return new Promise(function (resolve, reject) { fs.readFile(fileName, function(error, data) { if (error) return reject(error); resolve(data); }); });};const gen = function* () { const f1 = yield readFile('/etc/fstab'); const f2 = yield readFile('/etc/shells'); console.log(f1.toString()); console.log(f2.toString());};
下面代码的函数 gen 能够写成 async
函数,就是上面这样。
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
,将 yield 替换成 await
,仅此而已。
async
函数对 Generator 函数的改良,体现在以下四点。
具体的四点内容
ES6 教程
TypeScript 教程