2017-08-03 73 views
0

我使用angular2 http get方法從API中獲取對象數組。我希望一個observable可以在短時間內將數組1的元素加1,我怎麼實現這個功能呢?這就是我現在的代碼:Observable發出數組元素

return this.authHttp.get('fetch/arrayOfObjects',options).map(res => res.json()); 

我wan't它像下面的一個工作,所以結果是由一個單一的元素以1秒的延遲返回:

var obs = Rx.Observable.create(function (observer) { 
    let dt = [1,2,3,4,5]; 
    for(let e of dt){ 
    setTimeout(() => { 
    observer.next(e); 
    }, 1000); 
    } 
}); 

obs.subscribe(data=> console.log(data)); 

回答

2

可以使用concatAll()然後delay()到每個發射之間創建的暫停(我假定遠程服務返回對象的數組):

return this.authHttp.get('fetch/arrayOfObjects',options) 
    .map(res => res.json()) 
    .concatAll() // unpack the array into single emissions 
    .concatMap(val => Observable.of(val).delay(100)) // delay each emission 
    .subscribe(...) 
-1

您可以使用delay運營商。請參閱RxJs Docs