看了一圈网上的文章,关于 generator 函数自动执行的部分,看了 TJ 的 co 模块,都是递归调用 .next(),但是重复调用的时候是传入参数的,这个操作有什么实际的含义么?通常手动调用也不需要呀
function spawn(genF) {
return new Promise(function(resolve, reject) {
const gen = genF();
function step(nextF) {
let next;
try {
next = nextF();
} catch(e) {
return reject(e);
}
if(next.done) {
return resolve(next.value);
}
Promise.resolve(next.value).then(function(v) {
step(function() { return gen.next(v); });
}, function(e) {
step(function() { return gen.throw(e); });
});
}
step(function() { return gen.next(undefined); });
});
}
你先别管 co.js 的代码,实质就是封装了一个 Promise(没有 Promise 以前是个 Thunk)。
Promise 里,你
resolve(foo)
的时候不把结果传进去,下一个.then((res))
里咋拿上一步的结果?到 co.js 里不是一回事儿么?