我在将布尔值的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);
“真实”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函数内答案 0 :(得分:1)
org.nd4j.linalg.dimensionalityreduction.PCA
returns Observable
instance,顾名思义。这是一个可观察的。 asObservable
表明它根本不是可观察的(可以是未定义的),或者param instanceof Observable === false
类与在此模块中导入的类不是同一类。
项目中可以有多个RxJS包副本。这可能是可取的或不是。在这种情况下,重复数据删除Observable
包可能有所帮助。
任何方式,检查它是否是可观察的更清晰的方法是使用is-observable
包中使用的方法。考虑到应用程序包含rxjs
的ES6 polyfill,不需要抽象。它是:
Symbol