Могу ли я преобразовать метод setTimeout в observable.timer? - PullRequest
0 голосов
/ 22 января 2019

Слушай, я перебираю массив и хочу запускать этот цикл каждые 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?

Ответы [ 2 ]

0 голосов
/ 23 января 2019

молодец, должна быть версия es6 с rxjs 6.x:

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)
  );
0 голосов
/ 22 января 2019

Это должно работать:

    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>
...