2017-09-25 34 views
1

我需要依次運行兩個可觀察對象並僅返回第一個可觀察對象的結果。第二個觀察者需要首先在跑步之前完成。Rxjs返回依次運行的兩個可觀察對象的第一個結果

我發現了一種解決方法,但我並不滿意。你可以在這裏進行測試:plunker test

const first = Observable.of(10).delay(1000).do(res => console.log('first')); 
const second = Observable.of(20).do(res => console.log('second')); 
console.log('start'); 
const test = first.concatMap(ev => second.map(x=> ev)).subscribe(res => 
console.log(res)); 

我想一個更好的解決方案存在,但我不能找到它(我希望!)。 在此先感謝您的幫助。

+1

,我不認爲有什麼更好的辦法來做到這一點。唯一的改進可能是使用'ev => second.mapTo(ev)'使其更加明顯。 – martin

回答

1

我國內在我的腦海翻譯flatMapthen所以我希望看到類似...

const first = Observable.of(10).delay(1000).do(res => console.log('first')); 
const second = Observable.of(20).do(res => console.log('second')); 
const test = first.flatMap(rsp => { return second.mapTo(rsp); }); 

這是不是真的比你張貼的內容不同,但它會使我更有意義直覺上,因爲我不會開始考慮concat操作。

更新:

我想你也可以做......

const test = first.delayWhen(() => second.mapTo(0)); 

...但我不知道這是更具可讀性。

+0

這兩個條目的工作,但我希望比'second.mapTo'更乾淨。 – Karine

+0

你可以隨時編寫自己的操作符或靜態函數。稱它爲緩衝區或延遲直到什麼。 – Pace

0

用戶mergetake(1)

Observable.merge(first, second).take(1).subscribe(x=>console.log(x)); 
+0

它僅返回第二個結果。這不是我想要的 – Karine

相關問題