生成器和 babel-node

Generators and babel-node

不确定是不是我的 ES6 经验不足导致使用 Babel 出现问题,但我正在尝试创建一种异步 if ... then

var token = 6;

var f1 = function*() {
    if (token > 5) {
        getToken();
        token = yield;
    }
    console.log(token);
};

var getToken  = function() {
    for (i=0; i<10000000; i++) {
        var x = i*2;
    }
    f1(0);
};

f1();

然后我 运行 从它的文件

babel-node generator.es6.js

我期待 0 但我什么也没得到。

您需要调用生成器函数来创建生成器,然后使用 .next() 调用推进:

function* f() {
    var token = 6;
    if (token > 5) {
        getToken();
        token = yield;
    }
    console.log(token);
};

function getToken() {
    setTimeout(function() {
        f1.next(0); // advance generator
    }, 100);
};

var f1 = f(); // create generator
f1.next(); // start generator

请注意,推进生成器必须异步完成,直接从 getToken 调用它会在 f1 仍在执行时从 f1.next() 生成 TypeError。它需要首先到达 yield 语句。