2016-07-19 23 views
0

Observable<[number, Array<DataItem>]>のようなものを返す関数があります。 chunk(ページサイズに従ってDataItem配列をチャンク)とチャンクDataItem配列を持つPageWithDataItemsを作成する単純なコンストラクタを指定すると、Observable関数を使用してObservable<[number, Array<PageWithDataItems>]を返す関数を書くことは可能ですか? 私が持っているのは、Observable<[number, Array<DataItem>]>に登録して新しいObservableを作成するコードですが、map, mapTo, switchMapなどと同じことをすることができると期待しています。私はObservableのすべての機能で少し失われているので、どんな助け?チャンクされた配列を返す観測可能な関数

+0

既にコードを投稿してもらえますか?私はあなたが使用している表記法で100%ではありません。 – paulpdaniels

答えて

1

私はあなたがここのために行くされているものを全くわからないが、私はそれに打撃を与えた:

// 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のようなevensのストリームでは動作しません。これがあなたが望むものに近いことを望みます。あなたの質問は完全にはっきりしていません。

関連する問題