使用 rxjs 延迟和迭代对象

Delaying and iterating an object with 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]      
       });
  }

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

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

我猜你想制作这样的东西:

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

实际延迟是由 concatMap 执行的,它等待每个内部 Observable 完成后再订阅下一个。

您可以使用 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))