第 19 章 async 函数

async 函数

1. 含义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// 一个 Generator 函数,用于依次读取两个文件
const fs = require('fs');

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 函数的改进:
    1. Generator 函数的执行必须靠执行器,所以才有 co 模块,而 async 函数自带执行器,async 函数的执行只要一行:asyncReadFile();
    2. 更好的语义,async 和 await,比起 * 和 yield,语义更清楚
    3. 更广的适用性,co 模块约定,yield 命令后面只能是 Thunk 函数或 Promise 对象,而 async 函数的 await 命令后面,可以是 Promise 对象和原始类型的值
    4. 返回的是 Promise,比起 Generator 函数的返回值是 Iterator 对象方便
-------------本文结束 感谢您的阅读-------------
您的支持将鼓励我继续创作!