关于co函数的ret.value(next)新手疑问
这是一个最简单的co函数,里面ret.value(next) 为最重要的一句,但就是这很疑惑~
generator函数,next()后会返回 Object {value: 值, done: false或true}
而在co函数中,ret.value(next)这样把value当成函数传参调用,这是怎么理解呢?
3 回复
出处在哪的?ret.value要是一个函数才行。像你的例子,第一次,ret.value = 1,根本行不通。
要用co
的话,yield
后面必须要跟的是yieldable
的东西,简单点说也就是一个函数,这就是为啥会有ret.value(next)
的原因,让后续的yield
自动继续执行下去
你看的是 thunk 时期的代码
var read = function(path, enc){
return function(done){
fs.read(path, enc, done);
};
};
co(function* (){
var content = yield read(__filename, 'utf8');
})
ret.value 是 function(done){ fs.read(xxxx) }
ret.value(next) 是把 next 当参数调用 thunk
还是看 v4 Promise 版本的比较好