Gab*_*est 5 javascript reactjs redux redux-saga
如果我有两个传奇在等待yield take()同一个动作,是否有保证哪个传奇将首先接收动作并执行其剩余逻辑还是随机的?我需要确保第一个 saga 在第二个 saga 之前执行其逻辑。
function* rootSaga() {
yield [
saga1(),
saga2()
]
}
function* saga1() {
while (true) {
//Random logic
yield take("MY_ACTION")
//Finish executing logic
}
}
function* saga2() {
while (true) {
//Random logic
yield take("MY_ACTION")
//Finish executing logic
}
}
Run Code Online (Sandbox Code Playgroud)
您不能在这里依赖执行顺序。当您的操作被调度时,所有产生与take该操作匹配的效果的传奇将立即恢复。如果执行顺序是“有保证的”,那么它就是您不应该依赖的实现细节。
如果您需要在执行 后的逻辑saga2后恢复,那么您真正应该等待的是指示已完成其工作的不同操作,而不是第一个操作。saga1"MY_ACTION"saga2saga1
function* rootSaga() {
yield [
saga1(),
saga2()
]
}
function* saga1() {
while (true) {
//Random logic
yield take("MY_ACTION")
//Finish executing logic
yield put({type: "MY_ACTION_DONE"})
}
}
function* saga2() {
while (true) {
//Random logic
yield take("MY_ACTION_DONE")
//Finish executing logic
}
}
Run Code Online (Sandbox Code Playgroud)