我的Angular应用程序的服务中包含以下代码:
const subby = Subject.create(observer, observable)
但是我的IDE正确地将Subject.create
标记为已弃用。我应该用什么代替谢谢?我尝试过new Subject(observer, observable)
,但没有任何乐趣。 TIA。
RxJS版本:6.4.0
角度版本:7.2
答案 0 :(得分:2)
看看源代码,静态函数Subject.create(destination, source)
只是new AnonymousSubject<T>(destination, source)
的包装。
如果您只是想处理警告,可以将代码更改为
import { AnonymousSubject } from 'rxjs/internal/Subject';
const subby = new AnonymousSubject<T>(observer, observable);
RxJs已记录了他们进行此更改的动机here。重要报价:
Subject.create实际上并不创建主题,而是 AnonymousSubject,我真的很想将其重命名为 FrankenSubject因为描述了它是什么,所以您基本上可以粘合 一个可观察对象的观察者,并将其称为“主题”。
简而言之,使用Subject.create
(或AnonymousSubject
对象)是实现目标的一种混乱方法。
您可以查看此类here的源代码,但要点是,它是一个毫无意义的类,混淆了正在发生的事情。在代码中,您可以看到destination
和source
(Observer
和Observable
参数)没有交互作用。
因此,修复代码的“正确方法”是完全杀死该对象,并更明确地说明相关事件的路由方式。
例如:
// This code...
const subby = Subject.create(observer, observable);
subby.subscribe((value: value) => console.log(value));
subby.next("Test");
// Should be replace by this code
// Nothing
observable.subscribe((value: value) => console.log(value));
observer.next("Test");
我还发现了与使用Subject.create
有关的以下警告,这些警告可能与将来的读者有关:
答案 1 :(得分:1)
主题在创建时将不接受任何参数。所以你需要初始化它
例如(new Subject()
。之后,您可以在其上使用next方法发出值。