個人的にReduxの非同期処理は基本はMiddlewareを使わずコンポーネントに処理を書くことが多いが、redux-sagaでなんとなく使っていたジェネレーターについて復習がてら筆を執った次第。
function* generator() {
yield 'A';
yield 'B';
yield 'C';
yield* ['D', 'E', 'F'];
let test1 = yield 'G';
let test2 = yield 'H';
yield* [test1, test2];
}
const gen = generator();
console.log(gen.next()); // { value: 'A', done: false }
console.log(gen.next()); // { value: 'B', done: false }
console.log(gen.next()); // { value: 'C', done: false }
console.log(gen.next()); // { value: 'D', done: false }
console.log(gen.next()); // { value: 'E', done: false }
console.log(gen.next()); // { value: 'F', done: false }
console.log(gen.next()); // { value: 'G', done: false }
console.log(gen.next('I')); // { value: 'H', done: false }
console.log(gen.next('J')); // { value: 'I', done: false }
console.log(gen.next()); // { value: 'J', done: false }
console.log(gen.next()); // { value: undefined, done: true }
function* generator(count) {
while (1) {
yield count++;
}
}
const gen = generator(0);
console.log(gen.next()); // { value: 0, done: false }
console.log(gen.next()); // { value: 1, done: false }
console.log(gen.next()); // { value: 2, done: false }
console.log(gen.next()); // { value: 3, done: false }
console.log(gen.next()); // { value: 4, done: false }
イテレーター、あるいは途中で止まる関数として非同期処理を順序良く実行するのに使用機会がある。