使用rxjs延迟和迭代对象

时间:2017-05-16 12:37:11

标签: javascript rxjs rxjs5

我试图遍历对象中的键,并在一个键与另一个键之间设置的间隔后迭代它们。 我试图使用区间运算符来实现这一点但我没有成功。

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

我没有看到我的循环之间有任何延迟,所有我得到的是一个突然的迭代,这与正常的循环行为没有什么不同。

2 个答案:

答案 0 :(得分:2)

那是因为你在每次迭代中都创建了一个新的Observable。

我想你想做这样的事情:

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

实际延迟由concatMap执行,等待每个内部Observable在订阅下一个之前完成。

答案 1 :(得分: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))