听到我正在迭代数组,我想每2秒运行一次此循环。
let Array = [1,2,3,4,5,6]
for (i = 0; i < Array.length; i++) {
setTimeout((item)=>{
//business logic
console.log("item", item);
}, 2000 * i, Array[i]);
}
如何使用observable.timer方法转换此代码?
答案 0 :(得分:3)
这应该有效:
let Array = [1,2,3,4,5,6]
rxjs.interval(2000)
.pipe(
rxjs.operators.take(Array.length),
rxjs.operators.map(i => Array[i])
).subscribe(value => console.log(value));
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.3.3/rxjs.umd.min.js"></script>
它会在Array.length
个项目(take
)之后自动结束,并产生订阅(map
)中的项目而不是它们的索引。
RxJS v5版本:
let Array = [1,2,3,4,5,6]
Rx.Observable.interval(2000)
.take(Array.length)
.map(i => Array[i])
.subscribe(value => console.log(value));
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.5.12/Rx.min.js"></script>
答案 1 :(得分:0)
做得好,应该有一个带有rxjs 6.x的es6版本:
import { interval } from 'rxjs';
import { take, map } from 'rxjs/operators';
const array = [2, 3, 4, 5, 6];
interval(2000)
.pipe(take(array.length))
.pipe(map(i => array[i]))
.subscribe(
val => console.log(val)
);