angular - 转换为 Observable 的 BahaviorSubject 不被识别

标签 angular typescript rxjs

我在将 bool 值的BehaviorSubject 转换为“正确”的可观察值时遇到问题。
背景:
我有一个方法 toValue() ,它接受不同的类型并将它们转换为统一的格式。可观察量也应该被识别和类型化,到目前为止这是有效的。

为了对不断变化的 bool 值使用react,我在以下reddit-link下实现了@pashozator的响应。因此我传递给我的 toValue() 方法 BehaviourSubject.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

最佳答案

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

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

无论如何,检查它是否是可观察的更干净的方法是使用 is-observable 中使用的方法。包裹。考虑到该应用程序具有包括 Symbol 在内的 ES6 polyfill,因此不需要抽象。它是:

if (param && param[Symbol.observable]) ...

关于angular - 转换为 Observable 的 BahaviorSubject 不被识别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50504013/

相关文章:

angular - 如何将同一个对象的属性传递给 Angular 中的函数?

HTTP Post 请求正文被解释为文本/纯文本而不是 url 编码。

javascript - 如何在 TypeScript 中导出生成器函数?

javascript - 如何在 Kendo Grid 的模态窗口中显示文件内容

TypeScript - 仅提取接口(interface)成员 - 可能吗?

typescript - RXJS:向 Observable 添加一个函数以在订阅时执行(延迟)

angular - 在 Angular 2 中实现滑动导航的最佳方式是什么?

Angular 4/5 未捕获错误 : Template parse errors: Can't bind to 'mat-dialog-close' since it isn't a known property of 'button'

javascript - 未设置子组件中输入属性的 Angular 异步管道

javascript - 根据 Observable 元素的属性解析 Observables