CNode

关于co函数的ret.value(next)新手疑问

问答
Yyuanzhhh发布于11 年前最后回复11 年前3 回复5414 浏览0 收藏

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)

Z
zysam#1·11 年前

出处在哪的?ret.value要是一个函数才行。像你的例子,第一次,ret.value = 1,根本行不通。

H
hwoarangzk#2·11 年前

要用co的话,yield后面必须要跟的是yieldable的东西,简单点说也就是一个函数,这就是为啥会有ret.value(next)的原因,让后续的yield自动继续执行下去

M
magicdawn#3·11 年前

你看的是 thunk 时期的代码

var read = function(path, enc){
   return function(done){
     fs.read(path, enc, done);
   };
};

co(function* (){
    var content = yield read(__filename, 'utf8');
})

ret.valuefunction(done){ fs.read(xxxx) }
ret.value(next) 是把 next 当参数调用 thunk

还是看 v4 Promise 版本的比较好

参与回复
登录后即可参与回复。登录