web-dev-qa-db-ja.com

redux-sagasでアクションを待つ方法はありますか?

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..)
 }
9
ankit_m

はいあります。 takeを使用してこれを実現できます。

function *saga_b(action) {
  ...

  yield take(action_a) // this will put the saga_b essentially on hold until `action_a` is dispatched

  ...
}
8
haxpanel

私のコードベースのやり方は、他のサガを直接呼び出すことです。残念ながら、2つを結合しますが、待機する必要があるため、結合は少なくともより明確になります。

function *saga_b(action) {
  yield put(..action3..)
  yield call(saga_a, action_a)
  yield put(..action4..)
}
3
ctlevi

これは少し遅いですが、私は同じことに苦労し、人々はまだ同じ問題を抱えていると信じています。この機能を実現するには、独自の拡張機能を作成する必要がありました。 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..)
 }
0
kutlu