尝试在我的应用中复制和粘贴this解决方案时出现错误。
未定义不是对象(正在评估'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处为根目录”等,等等。
任何帮助都将受到欢迎,谢谢。
PD:
"react": "16.6.1",
"react-native": "0.57.5",
"react-native-ble-plx": "^1.0.1",
答案 0 :(得分:1)
eventChannel
也不是effects
的一部分,而是直接在主模块中定义的,请参阅相关的API doc。因此,如果您使用的是ES6 import/export
,请使用以下语句导入它:
import { eventChannel } from 'redux-saga'
等效require
应该是:
const eventChannel = require('redux-saga').eventChannel