2017-01-16 2 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) истинно, между «выходом 1» и «выходом 2»).Вызов next() для генератора внутри генератора

Я понимаю, почему этот код не работает (я не могу назвать 'gen.next()' до того, как генератор закончит работать), но мне интересно, если есть так или иначе, чтобы немедленно вызвать следующий шаг генератор изнутри генератора.

+2

Перепишите код для 'если (Foo) {выход 2; } '? –

ответ

3

Вы можете просто переписать логику только для выполнения второго выхода, если foo не является истинным. https://jsfiddle.net/xnxxs20u/

function *testGenerator(){ 
    yield 1; 
    if(!foo) yield 2;   
    console.log('bar') 
    yield 3; 
} 
Смежные вопросы