的可观察函数返回了一个分块数组

Observable function to returned a chunked array

本文关键字:一个 数组 观察 函数 返回      更新时间:2023-09-26

我有一个函数,它返回类似Observable<[number, Array<DataItem>]>的内容。是否可以使用一些Observable函数编写一些返回Observable<[number, Array<PageWithDataItems>]的函数,给定函数chunk(根据页面大小对DataItem数组进行分块)和一个简单的构造函数,该构造函数使用分块的DataItem数组创建PageWithDataItems。我有一些代码订阅了Observable<[number, Array<DataItem>]>,然后创建了一个新的Observable,但我希望map, mapTo, switchMap或类似的代码也可以这样做。我有点迷失在所有的Observable函数中,有什么帮助吗?

我不完全确定你在这里要做什么,但我试了一下:

// stream would be your data... just random chunks of numbers as an example here.
const stream = Rx.Observable.range(0, 480).bufferWithCount(100).select(d => [Math.random() * 100, d]);
class DataChunk<T> {
    constructor(public data: Array<T>) { }
}
const pageSize = 10;
stream
    // I do not understand what the 'number' in your [number, Array<DataItem>]
    // represents. But it is the 'someNumber' item here.. 
    .map(d => ({someNumber: <number>d[0], data: <number[]>d[1]}))
    .map(d => ({
        someNumber: d.someNumber,
        pages: Ix.Enumerable
            .fromArray(d.data)
            .select((item, idx) => ({ pageNr : idx % pageSize, item: item }))
            .groupBy(i => i.pageNr)
            .select(pageItems => new DataChunk(pageItems.select(i => i.item).toArray()))
            .toArray() 
    }))
    .subscribe(dataInfo => {
        // here each dataInfo sent down the stream will have been split up in to chunks
        // of pageSize
        log('Data recieved: ');
        log('  someNumber: ' + dataInfo.someNumber);
        log('  page count: ' + dataInfo.pages.length);
    });

jsfiddle上的工作示例。

我用IxJS做了分块。它的工作原理与RxJS类似,但对集合(例如数组)进行操作,而不是像RxJS这样的偶数流。我希望这接近你想要的,你的问题还不完全清楚。