JavaScript Generator.next() — наступне значення генератора
Метод next() проганяє генератор до наступного yield і повертає об'єкт { value, done }.
Загальний опис
value — те, що віддав yield. done стає true, коли генератор закінчився.
Але є річ, про яку майже ніхто не знає: у next() можна передати значення всередину. Воно стане результатом того yield, на якому генератор стояв.
Тобто спілкування двобічне: генератор віддає значення назовні через yield, а зовнішній код відповідає йому через next(відповідь). Саме на цьому колись будували асинхронність — до появи async/await.
Переглядачі
| Переглядач | ||||||
|---|---|---|---|---|---|---|
| next | 39+ | 26+ | 10+ | 26+ | 13+ | - |
| Переглядач | ||||
|---|---|---|---|---|
| next | 39+ | yes | yes | 10+ |
Приклади
+ запропонувати свій приклад у пісочниці
Двобічний обмін: yield віддає, next() відповідає.
function* dialog() {
const name = yield 'Як вас звати?';
const age = yield 'Скільки вам років, ' + name + '?';
return name + ', ' + age;
}
const it = dialog();
console.log(it.next().value); // 'Як вас звати?'
console.log(it.next('Іван').value); // 'Скільки вам років, Іван?'
console.log(it.next(30)); // { value: 'Іван, 30', done: true }
// після кінця — завжди undefined
console.log(it.next()); // { value: undefined, done: true }
Коментарі
Коментарів ще немає — будьте першим!