我试图遍历对象中的键,并在一个键与另一个键之间设置的间隔后迭代它们。 我试图使用区间运算符来实现这一点但我没有成功。
let obj = { 'a': [1,23,3], 'b': [12,23,2] };
for(let key in data) {
Observable.interval(5000).subscribe( () => {
// perform operation with data[key]
});
}
我没有看到我的循环之间有任何延迟,所有我得到的是一个突然的迭代,这与正常的循环行为没有什么不同。
答案 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))