Redux-Saga:是否有保证的 saga 执行顺序?

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)

Von*_*onD 6

您不能在这里依赖执行顺序。当您的操作被调度时,所有产生与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)