转换为Observable的BahaviorSubject不被识别

时间:2018-05-24 07:59:17

标签: angular typescript rxjs

我在将布尔值的BehaviorSubject转换为'正确'可观察时遇到问题   的背景
我有一个方法toValue(),它采用不同的类型并将它们转换为统一格式。也应该识别和输入可观察量,这是迄今为止有效的。

为了对更改的布尔值做出反应,我在以下reddit-link下实现了@ pashozator的响应。因此我传递给我的toValue()方法a BehaviorSubject.asObservable(),看起来像这样:

private isFinished: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(true);

toValue(this.isFinished.asObservable());

this.isFinished.next(true);
在toValue()方法中,转换后的BehaviorSubject不会被识别为Observable,BehaviorSubject或Subject,因此我无法将其键入Observable。

“真实”Observable与BehaviorSubject中的唯一区别在于source属性不是Observable,而是BehaviorSubject

// inside toValue()
//...

console.log(param instanceof Observable);      // false for isFinished.asObservable()
console.log(param instanceof BehaviorSubject); // false for isFinished.asObservable()
console.log(param instanceof Subject);         // false for isFinished.asObservable()

if (param instanceof Observable) {
    observable = (param as Observable<T>);
}

// ...

为什么转换后的BehaviorSubject不被识别为Observable,如何识别转换后的BehaviorSubject并将其视为Observable? 目标应该是立即处理这两种情况(“真实的”和转换的Observable),并且可以在以后订阅。

修改

这是工作plunkr,代码在app.component

的init函数内

https://plnkr.co/edit/MDxGS5kNgYNJaPmOaGXe?p=info

1 个答案:

答案 0 :(得分:1)

org.nd4j.linalg.dimensionalityreduction.PCA returns Observable instance,顾名思义。这是一个可观察的。 asObservable表明它根本不是可观察的(可以是未定义的),或者param instanceof Observable === false类与在此模块中导入的类不是同一类。

项目中可以有多个RxJS包副本。这可能是可取的或不是。在这种情况下,重复数据删除Observable包可能有所帮助。

任何方式,检查它是否是可观察的更清晰的方法是使用is-observable包中使用的方法。考虑到应用程序包含rxjs的ES6 polyfill,不需要抽象。它是:

Symbol