メインコンテンツにスキップ

タスクを並列に実行

非同期制御フローを線形スタイルで表す 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 の動作と同じです)。