タスクを並列に実行
非同期制御フローを線形スタイルで表す yield
ステートメントは優れていますが、並行して行う必要もあります。 次のように書くことはできません。
// wrong, effects will be executed in sequence
const users = yield call(fetch, '/users')
const repos = yield call(fetch, '/repos')
2 番目の効果は最初の呼び出しが解決されるまで実行されません。 代わりに、次のように記述する必要があります。
import { all, call } from 'redux-saga/effects'
// correct, effects will get executed in parallel
const [users, repos] = yield all([
call(fetch, '/users'),
call(fetch, '/repos')
])
効果の配列を生成すると、すべての効果が解決されるまで、または 1 つが拒否されるまでジェネレータはブロックされます (Promise.all
の動作と同じです)。