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,但要点是它是一个毫无意义的类,它混淆了正在发生的事情。在代码中,您可以看到destinationsourceObserverObservable 参数)没有交互。

因此,修复代码的“正确方法”是完全杀死该对象,并更明确地说明相关事件的路由方式。

例如:

// 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 的警告,这些警告可能与未来的读者有关:

Subjects created with Subject.create can't unsubscribe Subject Subscribe method not working as expected

【讨论】:

@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 已弃用

RXJS:从 of() 移动到 schedule()

PHP 已弃用:each() 函数已弃用 [重复]

Modernizr.load 已弃用。 Yepnope.js 已弃用。怎么办?

已弃用:指令 'allow_url_include' 在第 0 行的 Unknown 中已弃用

LocationRequest (FusedLocationProviderClient) - 已弃用