2017-08-27 46 views
1

我有以下可觀察我訂閱:Observable.never()保持發光值

Observable 
     .interval(2000) 
     .withLatestFrom(this.formObservable.map(x => x.data)) 
     .map(x => shouldThisRun ? x[1] : Observable.never()) 
     .do(console.log) 
     .subscribe() 

當我改變shouldThisRunfalse,所述Observable發射在控制檯以下:

23:09:03.967 Subscriber.js:247 NeverObservable {_isScalar: false} 
23:09:05.970 Subscriber.js:247 NeverObservable {_isScalar: false} 
23:09:07.973 Subscriber.js:247 NeverObservable {_isScalar: false} 
23:09:09.977 Subscriber.js:247 NeverObservable {_isScalar: false} 
23:09:11.980 Subscriber.js:247 NeverObservable {_isScalar: false} 

我不希望它發射任何東西。我不明白爲什麼它不會停止發佈價值。

回答

1

您正在將Observable映射爲Observable Observable。外部觀察點不斷髮射,這就是你所訂閱的內容。你真正想要的是每當外層發出時切換到最新的內層(切換含義:訂閱新的和退訂舊的內容)。那是switchMap爲你做的 。看一看switchMap的大理石圖表來獲得想法。

+0

謝謝,我必須將'x [1]'更改爲'Observable.of(x [1])',否則會引發錯誤。 – Spurious