我有一个获取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..)
}
答案 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..)
}