2017-03-17 153 views
3
var arr = [obs1, obs2, obs3]; 
Observable.forkJoin(...arr).subscribe(function (observableItems) {}) 

並行運行observables並返回一個數組。RXJX Observable按順序運行並返回一個數組

我該如何依次運行觀測值返回一個數組。我不想爲每個可觀察對象調用,所以concat()不適合我。

我想收到與forkJoin相同的最終結果,但是按順序運行。

它存在嗎?還是必須編碼我自己的可觀察模式?

+0

看來你正在尋找合併...爲什麼CONCAT不是一個選項(即使壽它不返回數組) – Maxime

+0

? - 你可以在連接結果上調用toArray。 –

+0

Concat不是一個選項,因爲他希望它們在//中運行,concat不會在// – Maxime

回答

6

只需使用concat然後toArray

var arr = [obs1, obs2, obs3]; 
Observable.concat(...arr).toArray().subscribe(function (observableItems) {}) 

如果你需要的行爲,更類似於forkJoin(只得到每個觀測結果最後),作爲@cartant在評論中提到:你將需要申請last運營商對觀測串聯在他們面前:

Observable 
    .concat(...arr.map(o => o.last())) 
    .toArray() 
    .subscribe(function (observableItems) {}) 
+1

中運行它們您將需要在源代碼中使用'last'運算符,因爲forkJoin會發出一個數組可觀察者的最終值和'concat'將發出整個值流。 – cartant

+0

是的,好點 - 你是對的,行爲有點不同。將添加這個答案。 –

+0

非常感謝。我可以扔掉我寫的自定義Subscriber/Observable模式! @cartant得到一些布朗尼點。 – jsgoupil

相關問題