簡體   English   中英

我可以將setTimeout方法轉換為observable.timer嗎?

[英]Can i convert setTimeout method to observable.timer?

聽說我正在迭代數組,我希望每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方法中轉換此代碼?

這應該工作:

  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 )之后自動結束並生成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)); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.5.12/Rx.min.js"></script> 

干得好,應該有一個帶有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)
  );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM