Последовательность Saga через yield*
Вы можете использовать встроенный оператор yield*
для создания последовательности сагов. Это позволяет вам последовательно выполнять макрозадания в простой процедурном стиле.
function* playLevelOne() { ... }
function* playLevelTwo() { ... }
function* playLevelThree() { ... }
function* game() {
const score1 = yield* playLevelOne()
yield put(showScore(score1))
const score2 = yield* playLevelTwo()
yield put(showScore(score2))
const score3 = yield* playLevelThree()
yield put(showScore(score3))
}
Обратите внимание, что использование yield*
приведет к тому, что среда выполнения JavaScript распространит всю последовательность.
Получившийся итератор (изgame()
) даст все значения из вложенных итераторов.
yield*
- более мощная альтернатива использующая более общий механизм составления промежуточного слоя1.
1. A more powerful alternative is to use the more generic middleware composition mechanism ↩