2017-08-31 4 views
-1

リスト["A"、 "B"、 "C"]内の項目ごとにWebサービスを呼び出す必要があります。サービスはページ単位でデータを返します(デフォルトページサイズ100)。サービスの最初の呼び出し(パラメータとしてpage = 1)は、応答としてヘッダーとして設定されたレコードの総数を持ち、それに基づいてサービスを複数回呼び出す必要があります。そして私は、すべての呼び出しの応答を待って、さらなる論理を進める必要があります。 Rxjsを使用して、上記実施するための任意のポインタを使用すると、再帰的にあなたが(.take(7)でシミュレート)Rxjsページ内のデータを返すサービスを呼び出す

をあなたのニーズを満たしているまで、ページングされたデータを取得する(getData(x))あなたのAPIを呼び出すことができexpand演算子を使用して大きな助けと

+0

https://stackoverflow.com/questions/35254323/rxjs-observable-paginationこれはあなたが探しているものはありますか? –

+0

こんにちは。私はそれが私の要件のために働いているが、応答は正しい形式ではありません。各サービスコールからの応答は、オブジェクトの配列です。だから、私は最終的なストリームでは、({{}、{}} [] {}、{} {{}}のような複数の配列オブジェクトを持つ必要があると思うが、フラットなオブジェクトのストリームを取得している。 ({} {} {}のように) –

答えて

0

になります

function getData(page) { 
 
    return Rx.Observable.of({ 
 
    page: page, 
 
    hasMoreData: page !== 4, 
 
    data: [ 
 
     page * 10 + 1, 
 
     page * 10 + 2, 
 
     page * 10 + 3, 
 
     page * 10 + 4, 
 
     page * 10 + 5 
 
    ] 
 
    }) 
 
    .delay(1000) 
 
    .do(() => console.log('retrieved data for page: ' + page)); 
 
} 
 

 
getData(1) 
 
    .expand(data => { 
 
    if (data.hasMoreData) { 
 
     return getData(data.page + 1); 
 
    } 
 
    return Rx.Observable.empty(); 
 
    }) 
 
    .mergeMap(dataObj => dataObj.data) 
 
    .take(7) 
 
    .subscribe(val => console.log('data: ' + val));
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.4.2/Rx.js"></script>

関連する問題