使用 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))
我正在尝试遍历对象中的键,并在一个键与另一个键之间的设定间隔后迭代它们。 我正在尝试使用间隔运算符来实现这一点,但我一直没有成功。
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))