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

时间:2017-06-27 21:12:19

标签: 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..)
 }

3 个答案:

答案 0 :(得分:4)

是的,有。您可以使用take来实现此目的。

function *saga_b(action) {
  ...

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

  ...
}

答案 1 :(得分:2)

我这样做的方式我的代码库是直接调用另一个传奇。不幸的是,它们将两者结合在一起,但由于你需要等待耦合至少会更明确。

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

答案 2 :(得分:0)

这有点晚了,但我为同样的事情而苦苦挣扎,并相信人们仍然有同样的问题。我必须编写自己的扩展程序才能实现此功能。参见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..)
 }