关于co函数的ret.value(next)新手疑问
发布于 9 年前 作者 yuanzhhh 4592 次浏览 最后一次编辑是 8 年前 来自 问答

964764574@chatroom_1447155074998_27.jpg

这是一个最简单的co函数,里面ret.value(next) 为最重要的一句,但就是这很疑惑~

7FA1.tmp.jpg 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 版本的比较好

回到顶部