web-dev-qa-db-fra.com

Comment arrêter un intervalle sur un observable dans RxJS

J'ai une situation spécifique où j'utilise un intervalle RxJS, mais à un moment donné, je devrai peut-être arrêter cet intervalle. J'ai supposé qu'il y avait quelque chose de facile comme un cancel () ou un stop (). Similaire à clearTimeout. Est-il possible d'arrêter un intervalle une fois qu'il se passe? Sinon, quelle serait une autre approche.

Fondamentalement, j'ai un grand tableau que je traverse. Mais il y a des choses extérieures qui pourraient arriver qui obligent à arrêter cette étape et à continuer vers une nouvelle tâche. J'espère que c'est quelque chose de simple que je manque juste dans les documents. Merci

19
selanac82

Est-il possible d'arrêter un intervalle une fois qu'il se passe?

Vous pouvez utiliser le .takeUntil opérateur pour terminer un observable quand un autre observable émet. Vous devrez bien sûr définir cet autre observable pour émettre des valeurs d'une manière qui vous soit utile, mais voici un exemple qui arrête un intervalle après 5 secondes:

Rx.Observable.interval(100)
  .takeUntil(Rx.Observable.timer(5000))
  .subscribe(val => console.log(val));
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.5.2/Rx.min.js"></script>
24
Nicholas Tower

Désinscrivez-vous simplement:

import { interval } from 'rxjs';

const subscription = interval(1000)
  .pipe(...)
  .subscribe();

...

subscription.unsubscribe();

Notez que puisque interval() est asynchrone, vous pouvez également appeler unsubscribe() dans le rappel de subscribe.

Juil 2019: mis à jour pour RxJS 6.

10
martin