Я читаю документацию по функциям генератора на MDN , чтобы изучать Redx-сагу. Здесь они упоминают, что вы можете передать аргументы методу iterator.next (), как показано ниже в этом примере на сайте.
function* logGenerator() {
console.log(0);
console.log(1, yield);
console.log(2, yield);
console.log(3, yield);
}
var gen = logGenerator();
// the first call of next executes from the start of the function
// until the first yield statement
gen.next(); // 0
gen.next('pretzel'); // 1 pretzel
gen.next('california'); // 2 california
gen.next('mayonnaise'); // 3 mayonnaise
Работает как положено.
Теперь я пытаюсь поиграть с этим и написал этот генератор.
function* foo() {
yield '1';
console.log(yield);
yield '3';
return '4';
}
var result = foo();
console.log(result.next());
console.log(result.next(2));
console.log(result.next());
console.log(result.next());
Ожидаемый вывод: 1 2 3 4 , но я получаю 1, не определено, не определено, 3,4, В чем проблема ?
РЕДАКТИРОВАТЬ : Как указано в комментариях, я не полностью отобразил вывод правильно. Пожалуйста, запустите фрагмент. Если я добавлю аргументы ко всем операторам next (), я получу следующий вывод.
{ value: '1', done: false }
{ value: undefined, done: false }
3
{ value: '3', done: false }
{ value: '4', done: true }