async函数原理是generator和promise,其中最重要的一个核心方法是co函数
- co函数 原版是tj所写,见https://github.com/tj
- 下面的co函数是自己的简单实现
co函数
function co(gen) {
let it = gen();
return new Promise(function(resolve, reject) {
!function next(lastVal) {
let {value, done} = it.next(lastVal);
if(done) {
resolve(value)
}else {
value.then(next, reject);
}
}
})
}
async函数等价于
async function read() {
let template = await readFile('./template.txt');
let data = await readFile('./data.txt');
return template + data;
}
// 上面的函数等价于
function read() {
return co(function *() {
let template = yield readFile('./template.txt');
let data = yield readFile('./data.txt');
return template + data;
})
}
文章中用到的其他函数
let fs = require('fs');
function readFile(fileName) {
return new Promise(function(resolve, reject) {
fs.readFile(fileName, 'utf8', function(err, data) {
err ? reject(err) : resolve(data)
})
})
}