2016-05-31 82 views
2

需要以下兩個觀測相結合:有條件地結合兩種觀測

  • observable1發出{ x: value1 }
  • observable2發出{ y: value2 }

observable3發出:

  • { x: value1, y: value2 }observable1火災(value2是由observable2發射的最後一個值)
  • { y: value }observable2火災

換言之,應該表現得像combineLatestobservable1發射和類似mergeobservable2發射。

有沒有一種優雅的方式來做到這一點?

+4

'Rx.Observable.merge(observable1.withLatestFrom(observable2),observable2)'? – user3743222

+0

你可以實現你自己的操作符。 – sielakos

+0

@ user3743222謝謝,就是這樣!原來,這很簡單。如果您將此作爲答案發布,我會接受它。 –

回答

3

你可以這樣做:

observable3 = Rx.Observable.merge(observable1.withLatestFrom(observable2), observable2) 

注意combineLatest不會在這裏工作,因爲它會等待observable2產生價值。無需等待,從observable2採取withLatestFrom的最新值。

我還建議你測試的邊緣情況:

  • observable2還沒有發出還沒有任何價值(withLatestFrom可能會阻塞等待,也不清楚從文檔)
  • observable2之前已完成你創建observable3