我有一个与RxJS有关的简单但困难的问题。假设我要订阅一个我不能修改的库提供的主题,但是我希望该订阅的行为就像我已经订阅了BehaviorSubject一样。是否有可能做类似的事情:
let plainSubject: Subject<string> = someLibrary.getSubject();
let behaviorSubject: BehaviorSubject<string> = BehaviorSubject.from(plainSubject);
let subscription = behaviorSubject.subscribe(() => foo());
很抱歉,如果这个问题没有任何意义,我对RxJS的了解仍然很基础。我什至不确定这是否可行,因为我没有发现谷歌搜索是否存在任何迹象。
谢谢!
约书亚
答案 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());