未定义不是对象(正在评估'_effects.buffers.expanding')

时间:2019-04-22 01:14:16

标签: react-native redux-saga

尝试在我的应用中复制和粘贴this解决方案时出现错误。

image

未定义不是对象(正在评估'effects.buffers.expanding')

我的代码非常相似:

export function* handleBleState() {
  const {
    bleConnections: { manager },
  } = yield select()

  const stateChannel = yield eventChannel((emit) => {
    const subscription = manager.onStateChange((state) => {
      emit(state)
    }, true)
    return () => {
      subscription.remove()
    }
  }, buffers.expanding(1))

  try {
    for (;;) {
      const newState = yield take(stateChannel)
      const power = newState === 'PoweredOn'
      yield put(BLEActions.updateBleState(power))
    }
  } finally {
    if (yield cancelled()) {
      stateChannel.close()
    }
  }
}

但是更奇怪的是,我从redux-saga的documentation中提取了代码,并且错误类似。 我用以下代码替换了部分代码:

  const stateChannel = yield eventChannel((emitter) => {
    const iv = setInterval(() => {
      secs -= 1
      if (secs > 0) {
        emitter(secs)
      } else {
        // this causes the channel to close
        emitter(END)
      }
    }, 1000)
    // The subscriber must return an unsubscribe function
    return () => {
      clearInterval(iv)
    }
  })

我得到:

未定义不是函数(计算'(0,_effects.eventChannel)')

我正在使用另一个版本的redux-saga:

    "redux-saga": "^1.0.2",

但是我尝试使用他使用的相同版本

    "redux-saga": "0.16.2"

然后是另一个问题:

console.error:在handleBleState处为“根目录已解除”,在“ takeLatest处为根目录”等,等等。

image

任何帮助都将受到欢迎,谢谢。

PD:

    "react": "16.6.1",
    "react-native": "0.57.5",
    "react-native-ble-plx": "^1.0.1",

1 个答案:

答案 0 :(得分:1)

eventChannel也不是effects的一部分,而是直接在主模块中定义的,请参阅相关的API doc。因此,如果您使用的是ES6 import/export,请使用以下语句导入它:

import { eventChannel } from 'redux-saga'

等效require应该是:

const eventChannel = require('redux-saga').eventChannel