[英]Pipe RxJS observable to existing subject
有正在使用的现有主题:
const fooSubject = new BehaviorSubject(null);
还有另一个可观察的(本例中的另一个主题):
const barSubject = new Subject();
barSubject.subscribe(
value => fooSubject.next(),
err => fooSubject.error(err),
() => fooSubject.complete()
);
barSubject.next('bar');
该代码有效,但看起来很笨拙。
有没有更好的方法来管道(广义上,不一定使用pipe
运算符) barSubject
可观察到fooSubject
? 它看起来像是一个可以由库本身处理的操作。
由于Subject已经是方法next()
, error()
和complete()
的观察者,你只需将它订阅到任何Observable:
const fooSubject = new BehaviorSubject(null);
const barSubject = new Subject();
barSubject.subscribe(fooSubject);
barSubject.next('bar');
关于在源 Observable 完成后取消订阅,我一直在使用这段代码。 它按预期运行,但我不知道它是否是“反模式”...?
const subscription = this.http.get(url)
.pipe(finalize(() => subscription.unsubscribe()))
.subscribe(this.mySubject$);
编辑:您不需要取消订阅http.get(..)
因为它是自动完成的。 因此,对于上面的代码,正确的形式是:
this.http.get(url).subscribe(mySubject$)
编辑 2:上述代码的一个问题是,当 http.get 完成时, mySubject$
也将完成。 现在,如果您.subscribe(mySubject$)
或mySubject$.next(..)
它不会发出值。 为避免这种情况并保持mySubject$
热,请使用以下代码:
this.http.get(url).subscribe(r => this.mySubject$.next(r))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.