【发布时间】:2023-08-05 03:57:01
【问题描述】:
我有一个 redux saga 设置,由于某种原因,当我试图从中 take 时,我的 channel 会阻塞,但我不知道为什么。
我有一个PubSub 机制,它订阅一个事件并在收到时调用这个函数:
const sendRoundEnd = (msg, data) => {
console.log('putting round end')
roundEndChannel.put({
type: RUN_ENDED,
data: data.payload
})
}
我有一个这样定义的频道的观察者:
function* watchRoundEndChannel() {
while(true) {
console.log('before take')
const action = yield take(roundEndChannel)
console.log('after take')
yield put(action)
}
}
我有一个减速器设置,它正在监听 put 的 RUN_ENDED,如下所示:
case RUN_ENDED:
console.log(action)
return {
...state,
isRunning: false,
roundResult: action.data
}
最后,我在文件中有一个roundEndChannel const(但不在函数中),我将以下函数导出为数组的一部分,该数组被输入yield all[]:
takeEvery(roundEndChannel, watchRoundEndChannel)
因此,如果我的理解是正确的,当我从我的 pubsub 获取消息时,我应该首先点击 sendRoundEnd,然后再点击 roundEndChannel,然后再点击 RUN_ENDED 操作。
但奇怪的是,当我运行这些函数并从 pubsub 接收消息时,会记录以下内容:
putting round end
before take
我从来没有到达过after take,这向我暗示该频道中没有任何内容,但我很确定情况并非如此,因为它应该是put 在事件中之前发布订阅的处理程序。
感觉好像我在这里遗漏了一些简单的东西,有没有人有任何想法(或者我可以在不同点检查频道以查看其中的内容的方法?)
【问题讨论】:
标签: javascript redux-saga saga