有没有办法在redux-sagas中等待一个动作?

ank*_*t_m 9 reactjs redux redux-saga

我有一个获取API的传奇(A).这与行动(a)联系在一起.我想触发一个动作(b),它在内部调用(a),等待它完成,然后yield是某些东西.

// 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..)
 }
Run Code Online (Sandbox Code Playgroud)

hax*_*nel 9

就在这里。您可以使用它take来实现。

function *saga_b(action) {
  ...

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

  ...
}
Run Code Online (Sandbox Code Playgroud)

  • 需要明确的是,它被推迟直到`action_a`被reducer处理 (3认同)

ctl*_*evi 4

我在代码库中执行此操作的方法是直接调用其他传奇。不幸的是,它将两者耦合在一起,但由于您需要等待,耦合至少会更加明确。

function *saga_b(action) {
  yield put(..action3..)
  yield call(saga_a, action_a)
  yield put(..action4..)
}
Run Code Online (Sandbox Code Playgroud)