rxjs Subject.create 已弃用-我应该改用啥?
Posted
技术标签:
【中文标题】rxjs Subject.create 已弃用-我应该改用啥?【英文标题】:rxjs Subject.create deprecated - what should I use instead?rxjs Subject.create 已弃用-我应该改用什么? 【发布时间】:2019-08-28 07:55:45 【问题描述】:我的 Angular 应用中的服务中有此代码:
const subby = Subject.create(observer, observable)
但我的 IDE 正确地将 Subject.create
标记为已弃用。我应该用什么代替谢谢?我试过new Subject(observer, observable)
但没有快乐。 TIA。
RxJS 版本:6.4.0
Angular 版本:7.2
【问题讨论】:
【参考方案1】:查看源代码,静态函数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 因为它描述了它是什么,所以你基本上是粘合 一个 Observer 到一个 Observable 并将其称为“主题”。
简而言之,使用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
的警告,这些警告可能与未来的读者有关:
【讨论】:
@danday74 你有没有得到那个“新方法”? 这是来自 ts lint 警告的线索... 警告:C:/Users/daniel/Desktop/biblical-hebrew/biblical-hebrew-fe/src/app/services/websocket.service。 ts[34, 29]: create 已弃用:改用 new Subject() 这仍然是我的代码库中的一个 tslint 警告 :( @danday74 更新了额外的研究。如果该详细信息还不够,我建议您提出一个新问题,并提供其他信息,例如您正在使用哪些参数以及您如何使用结果【参考方案2】:主题在创建时不会接受任何参数。所以你需要初始化它
喜欢(new Subject()
)。之后你可以使用 next 方法来发出值。
【讨论】:
以上是关于rxjs Subject.create 已弃用-我应该改用啥?的主要内容,如果未能解决你的问题,请参考以下文章
Angular 6 ng lint combineLatest 已弃用
Modernizr.load 已弃用。 Yepnope.js 已弃用。怎么办?