Ты тоже впервые узнал про генераторы, когда использовал redux-saga в проекте? 😅
И даже не подозревал, что генераторы — это встроенная фича самого JS?
Давай разбираться, что это такое и зачем они вообще нужны!
🔁 Генератор — это синтаксический сахар для создания итераторов, которые умеют не только
next(), но ещё и throw() и return().> 🧠 Генераторы появились в ES6. Их придумали, чтобы проще работать с ленивыми итерациями, асинхронным кодом и потоками данных. Они позволяют ставить выполнение на паузу и возобновлять — как будто у функции есть кнопка «продолжить» 🎮
📌 Как объявить генератор:
function* gen() {}
// можно и так:
function * gen() {}
function *gen() {}📌 Как использовать:
function* gen() {
yield 1
yield 2
}📌 yield* — делегирует выполнение другому генератору:
function* outer() {
yield* inner()
}📍 Главное отличие от обычной функции — можно приостанавливать выполнение и продолжать потом через
.next()!📌 Также есть
.return() — завершает генерацию📌
.throw() — завершает с ошибкой---
🧩 Попробуем решить задачку:
https://bigfrontend.dev/quiz/generator-return
function* gen() {
yield 1
try {
yield 2
yield 3
} finally {
yield 4
}
yield 5
}
const g = gen()
console.log(g.next().value)
console.log(g.next().value)
console.log(g.return(6).value)
console.log(g.next().value)
console.log(g.next().value)Прежде чем посмотреть ответ выбери то что считаешь правильным в опросе ниже
1 // первый yield
2 // второй yield
4 // return вызывает finally
6 // значение из return()
undefined // генератор завершён
А если хочешь копнуть глубже — вот отличный разбор:
https://doka.guide/js/generators/