我可以将 setTimeout 方法转换为 observable.timer 吗?

nks*_*nks 6 timer observable angular

听说我正在迭代数组,我想每 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]);
    }
Run Code Online (Sandbox Code Playgroud)

如何在 observable.timer 方法中转换此代码?

tka*_*usl 9

这应该有效:

    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));
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.3.3/rxjs.umd.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

它自动在Array.lengthitems ( take)之后结束,并产生 subscribe ( 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));
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.5.12/Rx.min.js"></script>
Run Code Online (Sandbox Code Playgroud)