[英]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.