Quantcast
Channel: CNode:Node.js专业中文社区
Viewing all articles
Browse latest Browse all 14821

能讲清楚这段代码的不是大牛,就是即将迈向大牛的小牛!

$
0
0
co.wrap = function(gen) {
    var idt = gen(resume)
    function resume() {
        var args = arguments
        process.nextTick(function() {
            var obj = idt.next(args).value
            if (obj && isPromise(obj))
                obj.then(
                  (res) => {
                    resume(null, res)
                  },
                  (err) => resume(err)
                )
        })
    }
    return resume
}
co.run = function(gen) {
    co.wrap(gen)()
}
co.run(function * ($) {
	// yield
})

对应这句代码我不是很理解: resume(null, res)望指教

原来我不理解是因为: 不懂为什么要递归呢? 是为了继续运行生成器函数,直到返回 Object { value: undefined, done: true }resume(null, res)传的参数是干什么用的呢? 实际上是将结果传回去,类似这个

function* gen() {
  while(true) {
    var value = yield null;
    console.log(value);
  }
}

var g = gen();
g.next(1); 
// "{ value: null, done: false }"
g.next(2); 
// "{ value: null, done: false }"
// 2

等我想好了,我会告诉大家使用process.nextTick( )的意义。


Viewing all articles
Browse latest Browse all 14821

Trending Articles