生成器和 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
语句。
不确定是不是我的 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
语句。