gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 21:48:25 24 4
gpt4 key购买 nike

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

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

最佳答案

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com