JavaScript ES6 生成器

标签 javascript generator ecmascript-6

我正在深入研究 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一个promise,当promise被解析时,co将使用promise解析的值调用.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);
});

关于JavaScript ES6 生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28232102/

相关文章:

javascript - 单击时将变量设置为等于此值

javascript - 渐进增强/优雅降级和网络应用

javascript - IE9 javascript 排序顺序...为什么?

javascript - 将参数传递给 forEach.call 中的函数

javascript - 如何使用 npm 在 ES6 中导入 moment.js?

c# - 跨浏览器打印 View

perl - 将 Perl 的文件输入角度运算符重载为通用迭代器/生成器是否合适?

python - StopIteration 不会被 main() 捕获

javascript - 带函数的同步代码

ecmascript-6 - 为什么 babel 以这种方式转换默认参数?