Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.5k views
in Technique[技术] by (71.8m points)

rxjs - Any way to reset Interval value if a certain condition met?

Suppose I have an array of integers and I want to iterate over this array in a interval of one second, the current second being the index of the array. Once the index reaches the end, I want to reset the interval value. Whats the right approach to achieve this behavior? Stackblitz example Code:

const array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

interval(1000)
  .pipe(
    tap(second => {
      if (array[second]) {
        console.log(array[second]);
      } else {
        //reset interval to run in a cyclic manner?
      }
    })
  ).subscribe();
question from:https://stackoverflow.com/questions/65541046/any-way-to-reset-interval-value-if-a-certain-condition-met

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

So you want to repeat the same sequence indefinatelly.

import { from, of } from "rxjs";
import { concatMap, repeat, delay } from "rxjs/operators";

const array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

from(array)
  .pipe(
    concatMap(second => of(second).pipe(
      delay(second * 1000),
    )),
    repeat(),
  )
  .subscribe(console.log);

Live demo: https://stackblitz.com/edit/rxjs-interval-pmlj6e


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...