Redux传奇频道阻塞不一致

时间:2018-01-12 18:52:59

标签: javascript redux-saga saga

我有一个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()

感觉我在这里错过了一些简单的东西,有没有人有任何想法(或者我可以在不同的点检查频道,看看那里有什么?)

1 个答案:

答案 0 :(得分:0)

Arg,设法解决这个问题。问题是我导出了watchRoundEndChannel包裹在takeEvery中的fork(watchRoundEndChannel),它抓住了我推送的事件。

我导出了像{{1}}这样的函数,并且按照我的预期工作。