2017-08-31 61 views
-1

我需要爲列表[「A」,「B」,「C」]中的每個項目調用Web服務。該服務將返回頁面中的數據(默認頁面大小爲100)。服務的第一次調用(使用page = 1作爲參數)將有記錄的總數設置爲響應中的標題,並基於我需要多次調用該服務。我需要等待所有調用的響應,才能繼續進一步的邏輯。任何指針來實現上述使用Rxjs將有很大的幫助Rxjs調用返回頁面中的數據的服務

+0

https://stackoverflow.com/questions/35254323/rxjs-observable-pagination是,這是你在找什麼? –

+0

嗨。我的工作滿足了我的要求,但響應格式不正確。來自每個服務調用的響應都是一個對象數組。所以我認爲在最後一個流應該有多個數組對象(如[{},{}] [] {},{} [{},{}]),但我得到了一系列扁平對象。 (喜歡 {}{}{}) –

回答

0

使用expand操作符,你可以遞歸調用的API(getData(x))來檢索分頁的數據,直到你填寫你的需求(用.take(7)模擬)

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>