简单的Generator控制异步流程
简单的Generator控制异步流程
by pm123
JavaScript
console.log = function(str) {
var node = document.createElement("p");
node.innerHTML = str;
document.body.appendChild(node);
}
var file = {
'file1.txt': "file2.txt",
'file2.txt': 'Hello, Generator!'
};
/**
* @description 模拟读取文件
*/
function readFile(filename, cb) {
setTimeout(function() {
cb(null, file[filename]);
}, 1000)
}
/**
* @description 文件读取完成后的回调函数,获取generator的控制权,并将文件内容传回给generator。
* @param {Object} err
* @param {any} data
*/
function dealWith(err, data) {
gen.next(data);
}
/**
* @description 主程序
*/
function* run() {
var file1 = yield readFile("file1.txt", dealWith); // 获取file1.txt的内容
var file2 = yield readFile(file1, dealWith); //从file1.txt中获取file2的文件名,并获取file2的内容
console.log(file2); // 弹出file2的内容
}
var gen = run(); // 实例化generator
gen.next(); // 启动genertor