我有一个redux saga设置,出于某种原因我channel
阻止了我take
尝试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
我有一个reducer设置正在监听RUN_ENDED
这样的case RUN_ENDED:
console.log(action)
return {
...state,
isRunning: false,
roundResult: action.data
}
:
roundEndChannel
最后,我在文件中有一个yield all[]
const(但不在函数内),我将以下函数导出为数组的一部分,该数组被输入takeEvery(roundEndChannel, watchRoundEndChannel)
:
sendRoundEnd
因此,如果我的理解是正确的,当我从pubsub获取消息时,我应该首先点击roundEndChannel
,然后放入RUN_ENDED
,这应该反过来putting round end
before take
行动。
然而,当我运行这些函数并从pubsub接收消息时,会发现以下内容:
after take
我从未接触过put
,它告诉我该频道中没有任何内容,但我很确定这不应该是它应该有的情况在紧接之前的pubsub的事件处理程序中已经somefunction()
。
感觉我在这里错过了一些简单的东西,有没有人有任何想法(或者我可以在不同的点检查频道,看看那里有什么?)
答案 0 :(得分:0)
Arg,设法解决这个问题。问题是我导出了watchRoundEndChannel
包裹在takeEvery
中的fork(watchRoundEndChannel)
,它抓住了我推送的事件。
我导出了像{{1}}这样的函数,并且按照我的预期工作。