undefined не является объектом (оценка '_effects.buffers.expanding') - PullRequest
0 голосов
/ 22 апреля 2019

Я получаю сообщение об ошибке при попытке скопировать и вставить это решение в моем приложении.

image

undefined не является объектом (оценка'effect.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()
    }
  }
}

Но что более странно, я извлек код из документации of redux-saga и ошибка похожа.Я заменил часть кода на это:

  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)
    }
  })

И я получаю:

undefined не является функцией (вычисляя '(0, _effects.eventChannel)')

Я использую другую версию redux-saga:

    "redux-saga": "^1.0.2",

Но я пробовал с той же версией, которую он использует

    "redux-saga": "0.16.2"

А потом проблемаэто еще один:

console.error: "unchaught at root", "root in takeLatest" в handleBleState и т. д. и т. д.

image

Любая помощь будетдобро пожаловать, спасибо заранее.

PD:

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

1 Ответ

1 голос
/ 22 апреля 2019

eventChannel не является частью effects, но определено непосредственно в главном модуле, см. Соответствующий API документ .Поэтому, если вы используете ES6 import/export, вы импортируете его с помощью следующего оператора:

import { eventChannel } from 'redux-saga'

В то время как эквивалент require должен быть:

const eventChannel = require('redux-saga').eventChannel
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...