1. Generator函数
function* gen(x){
let y = yield x + 2;
return y
}
Generator 函数就是一个封装的异步任务。异步操作需要暂停的地方,都用 yield 语句暂停。
let g = gen(1);
g.next() // { value: 3, done: false }
g.next() // { value: undefined, done: true }
next 方法还可以接受参数,这是向 Generator 函数体内输入数据。
var g = gen(1);
g.next() // { value: 3, done: false }
g.next(2) // { value: 2, done: true }
Generator 函数内部还可以捕获函数体外抛出的错误
function* gen(x){
try {
var y = yield x + 2;
} catch (e){
console.log(e);
}
return y;
}
var g = gen(1);
g.next();
g.throw('出错了');
// 出错了
2. co 函数库可以让你不用编写 Generator 函数的执行器
var gen = function* (){
var f1 = yield readFile('/etc/fstab');
var f2 = yield readFile('/etc/shells');
console.log(f1.toString());
console.log(f2.toString());
};
var co = require('co');
co(gen);
这样generator函数就会自动执行,co 函数返回一个 Promise 对象,因此可以用 then 方法添加回调函数。
co(gen).then(function (){
console.log('Generator 函数执行完成');
})
网友评论