簡體   English   中英

RXJS如何將Observable <T []>轉換為Observable <T>

[英]RXJS How to convert Observable<T[]> to Observable<T>

我想采用Observable <T []>並將其轉換為Observable <T>,以便Observable <T []>中的每個數組都被分解,然后通過單獨的方式發出數組的各個元素Observable <T>。

這樣做有標准的操作員嗎? 我已經四處尋找但沒找到任何東西。 謝謝。


在指向concatMap / flatMap的方向后,我提出了以下一般解決方案:

var source: Observable<T[]>;
...
var splitSource = source.flatMap<T>((x:T[]) => { return Rx.Observable.fromArray(x); });

您可以像這樣使用concatMap

function identity (x) {return x}

var obs_of_array$ = Rx.Observable.return(['1','2','you got it'])
    .concatMap(identity)

這是有效的,因為concatMap還接受數組(和observables和promises)作為您作為參數傳遞的函數選擇器的返回值。 Jsbin 在這里 ,文檔在這里

因此,作為參數傳遞的數組成為選擇器函數的返回值,然后由concatMap運算符展平,同時concatMap數組的順序。

我也一直在努力將Observable<T[]>轉換為Observable<T>

我發現flatMap()完成了它自己的工作,我認為11個月前問題的問題並非如此。

為了說明,在@ user3743222的答案的jsfiddle中,您可以進行此更改並獲得相同的輸出:

//.concatMap(identity)
.flatMap(theArray=>theArray)

我使用this和toArray()運算符在管道中執行set操作,例如對observable進行排序。

    let sorted$ = source$.toArray().flatMap(theList=> theList.sort(this.myComparer) )

輸出是Observable<T> NB在固定數組的上下文中工作,不確定連續生成源會發生什么)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM