1

如何让观察者传奇仅在动作模式的第一次调度时触发工人传奇?

function* rootSaga() {
    yield takeEvery(CHATBOT.START, handleChatbotLoad); //I want watcher saga to trigger handleChatbotLoad only on the very first dispatch of CHATBOT.START
    yield takeEvery(CONVERSATION.ADD_QUERY, handleUserInput);
}

所以,我希望观察者传奇仅在第一次发送 CHATBOT.START 时触发 handleChatbotLoad。我可以在状态中有一个标志,started并且只发送一次 CHATBOT.START。但后来我期待一种类似takeFirst或类似的方法。有没有这样的方法来实现这一目标?

4

1 回答 1

1

您可以在 root saga 中调用(或spawnfork)某些函数,这意味着它只会在应用程序启动时被调用一次。并在此函数中使用take来等待调度的动作:

function* onlyVeryFirstStartWatcher() {
    const action = yield take(CHATBOT.START);
    // started, do stuff...
    yield call(handleChatbotLoad);
}

function* rootSaga() {
  yield takeEvery(CONVERSATION.ADD_QUERY, handleUserInput);
  yield call(onlyVeryFirstStartWatcher)
}
于 2020-08-07T09:10:25.920 回答