APIをフェッチするサガ(A)があります。これはアクション(a)と結びついています。内部で(a)を呼び出し、それが終了するのを待ってからyield
何かを行うアクション(b)をトリガーしたいと思います。
// saga A -> action_a
function *saga_a(action) {
yield put( ...action1...);
yield call(api, ...params);
yield put( ...action2...);
}
// saga B -> action_b
function *saga_b(action) {
yield put(..action3..)
waitFor -- put(action_a) <------ how to achieve this?
yield put(..action4..)
}
はいあります。 take
を使用してこれを実現できます。
function *saga_b(action) {
...
yield take(action_a) // this will put the saga_b essentially on hold until `action_a` is dispatched
...
}
私のコードベースのやり方は、他のサガを直接呼び出すことです。残念ながら、2つを結合しますが、待機する必要があるため、結合は少なくともより明確になります。
function *saga_b(action) {
yield put(..action3..)
yield call(saga_a, action_a)
yield put(..action4..)
}
これは少し遅いですが、私は同じことに苦労し、人々はまだ同じ問題を抱えていると信じています。この機能を実現するには、独自の拡張機能を作成する必要がありました。 https://github.com/kutlugsahin/redux-saga-callback を参照してください
最終的にはこれを行うことができるようになります
// saga B -> action_b
function *saga_b(action) {
yield put(..action3..)
yield putWait(action_a) <------ how to achieve this?
yield put(..action4..)
}