4.2 Troubleshooting

优质
小牛编辑
129浏览
2023-12-01

这是一个分享公告问题并且找到解决方案的地方。

如果你的问题没有被在这里列出来或者你需求其他帮助,请首先使用Stack Overflow添加 redux-observable 标签。如果在一个合理的时间段后没有得到响应,创建包含 Stack Overflow 问题链接的 issue

你同样可以从公共[Gitter channel]中得到帮助(https://gitter.im/redux-observable/redux-observable)!


RxJS operators are missing! e.g. TypeError: action$.ofType(...).switchMap is not a function

RxJS 支持单独添加操作符的能力从而使你的包会很小。 redux-observable 通过使 ActionsObservable 继承 Observable,但是没有在原型上添加任何操作符来实现。

Add all operators

如果你想添加所以的操作符, 你可以在你的入口文件 index.js 中添加完整的库:

import 'rxjs';

这会将所有的 RxJS 核心操作符添加到 Observable 原型上。

Add only the operators you use

tl;dr

import 'rxjs/add/operator/switchMap';
action$.ofType(...).switchMap(...);

// OR

import { switchMap } from 'rxjs/operator/switchMap';
action$.ofType(...)::switchMap(...);

有很多种方法可以做到,所以我们在文档中并没有特别的推荐某个。产看 [RxJS 文档] (https://github.com/ReactiveX/rxjs).

如果巧妙的使用了 'rxjs/add/operator/name',你可能会发现将所有依赖的操作符引用放到创建的单个文件中,你就不会引入同一个操作符多次。


TypeError: object is not observable

这通常意味着你给 RxJS 操作符传递了非 observable-like 的对象。这意味不是 Observable,Promise,Array,不支持 Symbol.observable 等等。

下面是一些例子

(action$, store) => Observable.from(store)

提供给 Epics 的 store 和 redux 给中间件的 store 相同。并不是完全版本的 store, 所以它不支持 Symbol.observable 从而不允许 Observable.from(store)。你可以 看这里学到更多.


TypeError: Cannot read property 'subscribe' of undefined

这大多数意味着你正在使用期望提供 observable 的操作符但是你什么也没有提供。经常,你提供了变量但是被某些未知设置为 undefined,所以 debugger 进一步确认。

Happens from combineEpics()

通常,这意味着你的某个 Epics 没有返回 observable。很多情况下都是缺失了 return

const myEpic = action$ => { // MISSING EXPLICIT RETURN!
  action$.ofType(...).etc(...)
};

this is set to Window

如果你将 epics 放到类中。(例如,为了获取 Angular 2 依赖注入的好处),你可能在使用类方法的时候遇到错误:

class TooFancy {
  constructor(private somethingInjected:SomethingInjected)
  checkAutoLogin (action$: Observable<IPayloadAction>) {
    console.log(this); // Is Window! when called from redux-observable
  }
}

修改为:

class TooFancy {
  constructor(private somethingInjected:SomethingInjected)
  checkAutoLogin =  (action$: Observable<IPayloadAction>) => {
    console.log(this); // YOu can access somethingInjected
  }
}

察看 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions (箭头函数)


Something else doesn’t work

如果你认为你的 issue 是 redux-observable 的一个 bug,创建 issue;

如果你弄明白了,编辑该文档 这样对下个遇到同样问题 的人很礼貌。