2017-05-16 11 views
0

オブジェクト内のキーをループして、あるキーと別のキーとの間に設定された間隔で反復しようとしています。 私は間隔演算子を使用してこれを達成しようとしていますが、そうすることで失敗しました。rxjsを使ったオブジェクトの遅延と反復

let obj = { 'a': [1,23,3], 'b': [12,23,2] }; 
for(let key in data) { 
     Observable.interval(5000).subscribe(() => { 
     // perform operation with data[key]  
     }); 
    } 

私は私のループ間のいずれかの遅延が表示されていないと私は取得していますすべては、通常のループbeahviorと変わらない突然の繰り返しです。

答えて

2

これは、各繰り返しで新しいObservableを作成するためです。実際の遅延がconcatMapによって行われる

Observable.from(Object.keys(obj)) 
    .concatMap(item => Observable.of(item).delay(5000)) 
    .subscribe(item => console.log(item)); 

次のいずれかに加入する前に、それぞれの内側の観察可能完了するまで待機します:

は、私はあなたがこのようなものを作りたかったと思います。

+0

ありがとう、非常に明確で分かりやすい。 – Bazinga777

+0

2回目の反復を遅らせることができます。これは、最初の反復を実行し、残りを遅らせることを意味します。タイマーのようなもの – Bazinga777

+0

@ Bazinga777 'concatMap'へのコールバックはオプションの引数としてインデックスを取るので、.concatMap((item、i)=> i === 0?Observable.of(item): Observable .of(item).delay(5000)) ' – martin

0

zip演算子とタイマー演算子を使用できます。タイマーはarg 0の区間と似ています - すぐに発光を開始します。

let obj = { 'a': [1,23,3], 'b': [12,23,2] }; 

Rx.Observable.zip(
    Rx.Observable.timer(0, 5000), 
    Rx.Observable.from(Object.entries(obj)), 
    (timer,val)=>val 
) 
.subscribe(x=>console.log(x)) 
関連する問題