在node中封装next的原理如何理解?
function co(GenFunc) {
return function(cb) {
var gen = GenFunc()
next()
function next() {
if (gen.next) {
var ret = gen.next()
if (ret.done) { // 如果结束就执行cb
cb && cb()
} else { // 继续next
ret.value(next)
}
}
}
}
}
初学koa,tj大神的co库核心代码如上,我很难理解ret.value(next) 它只是把next函数体传给了ret对象的value属性,怎么就可以再次执行next()呢(我的理解是整个函数只执行了一次gen.next(),没有递归)请大家答疑解惑,不胜感激!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我前几天写过一篇关于koa中间件原理的文章,希望能帮到你理解一点点generator探幽(1)--koa中间件机制浅析
(ps:koa里next的实现其实不是co,是一个叫compose的这么个函数)