不确定使用Babel是否是我的ES6缺乏经验,但是我试图创建一种异步的if ... then
block ::=
block_statement
| block_statement block
;
block_statement ::=
type variable_declarators SEMICOLON
| statement
;
statement ::= sub_statement
| IF LPAREN boolexp RPAREN statement FI
| IF LPAREN boolexp RPAREN statement ELSE statement FI
| WHILE LPAREN boolexp RPAREN statement ELIHW
| FOR LPAREN assignment SEMICOLON boolexp SEMICOLON
statement_expression RPAREN statement ROF
;
sub_statement ::=
statement_expression SEMICOLON
| RETURN Exp SEMICOLON
| block
;
statement_expression ::=
assignment
| IDENTIFIER LPAREN argument_list RPAREN
| IDENTIFIER PLUSPLUS
| IDENTIFIER MINUSMINUS
;
然后我用
从其文件中运行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 :(得分:1)
您需要调用生成器函数来创建生成器,然后使用.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
调用它会导致TypeError
来自f1.next()
而f1
仍在执行。它需要首先到达yield
语句。