Javascript ES6 生成器

Javascript ES6 Generators

我正在研究 javascript 生成器,我真的很困惑。

我正在使用 node@0.11.x 到 运行 这个例子:

function find() {
    process.nextTick(function() {  
        it.next(1);
    });
};

var it = (function* main() {
    var k = yield find();

    console.log(k);
})();

it.next();

有没有办法在生成器中获取对 next 函数的引用?

类似于:

function find(next) {
    process.nextTick(function() {  
        next(1);
    });
};

(function* main() {
    var k = yield find(this.next);

    console.log(k);
})().next();

要直接回答你的问题,你不能,因为 this 生成器函数内部不是生成器实例,它是函数调用的上下文。你可以这样做:

function find(next) {
    process.nextTick(function() {  
        next(1);
    });
};

var it = (function* main() {
    var k = yield find(it.next.bind(it));

    console.log(k);
})();

it.next();

但这很难理解。通常,这将通过像 co 这样的协程库来完成。这样,您将 yield 一个承诺,当承诺得到解决时,co 将使用承诺解决的值调用 .next

var co = require('co');

function find(){
    return new Promise(function(resolve){
        process.nextTick(function(){
            resolve(1);
        });
    });
}

co(function * (){
    var k = yield find();

    console.log(k);
});