let gen = testGenerator(),
foo = true;
console.log( gen.next().value ); //logs 1
console.log( gen.next().value ); // throws 'Uncaught Error: Generator is already running'
function *testGenerator(){
yield 1;
if(foo) gen.next(); //I want to immediately advance the generator after the 'yield 2' and run again to 'yield 3'
yield 2;
console.log('bar')
yield 3;
}
我希望能够根据生成器运行时遇到的某些逻辑将JS生成器推进到下一阶段(在此示例中,'foo'是否为真,'yield 1'和'yield 2'之间)。
我理解为什么这段代码不起作用(我不能在生成器运行完毕之前调用'gen.next()'),但我想知道是否还有立即调用“下一步”的步骤发电机内部的发电机。
答案 0 :(得分:3)
如果foo不为真,你可以简单地重写逻辑以仅执行第二次收益。 https://jsfiddle.net/xnxxs20u/
function *testGenerator(){
yield 1;
if(!foo) yield 2;
console.log('bar')
yield 3;
}