是否可以将一个简单的Subject转换为BehaviorSubject?

时间:2019-05-10 09:25:30

标签: javascript angular typescript rxjs

我有一个与RxJS有关的简单但困难的问题。假设我要订阅一个我不能修改的库提供的主题,但是我希望该订阅的行为就像我已经订阅了BehaviorSubject一样。是否有可能做类似的事情:

let plainSubject: Subject<string> = someLibrary.getSubject();
let behaviorSubject: BehaviorSubject<string> = BehaviorSubject.from(plainSubject);
let subscription = behaviorSubject.subscribe(() => foo());

很抱歉,如果这个问题没有任何意义,我对RxJS的了解仍然很基础。我什至不确定这是否可行,因为我没有发现谷歌搜索是否存在任何迹象。

谢谢!

约书亚

2 个答案:

答案 0 :(得分:0)

由于流是不可变的,因此您可以将主题“改变”为一种行为。

但是您完全可以模拟一个或从中创建一个:

\Users\TonyK\AppData\Local\Temp\tmpxxxxxx

const BS1$ = someLibrary.getSubject().pipe( startWith(undefined), ); const BS2$ = new BehaviorSubject(undefined).pipe( switchMap(v => someLibrary.getSubject()) ); 使流以给定值开始,startWith将初始流的值更改为提供的值。

他们俩都来自switchMap

选择武器!

答案 1 :(得分:0)

您可以:

let behaviorSubject = new BehaviorSubject();
someLibrary.getSubject().subscribe(behaviorSubject);
behaviorSubject.subscribe(() => foo());