2017-01-16 8 views
1
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'の間で真です)。ジェネレータのジェネレータ内部でnext()を呼び出す

私はこのコードが動作しない理由を理解しています(ジェネレータの実行が完了する前に 'gen.next()'を呼び出すことはできません)。しかし、すぐに '次の'ステップを呼び出すにはどうしたらいいですか?ジェネレータ内部のジェネレータ。

+2

。 } '? –

答えて

3

fooが真でない場合、2番目の歩留まりを実行するだけのロジックを書き直すことができます。 https://jsfiddle.net/xnxxs20u/

function *testGenerator(){ 
    yield 1; 
    if(!foo) yield 2;   
    console.log('bar') 
    yield 3; 
} 
`場合(FOO!){利回り2にコードを書き換え