Как остановить интервал наблюдаемого в RxJS

У меня есть конкретная ситуация, когда я использую интервал RxJS, но в любой момент мне может понадобиться остановить этот интервал. Я предположил, что есть что-то легкое, как cancel() или stop(). Подобно clearTimeout. Можно ли остановить интервал после его завершения? Если нет, то какой будет другой подход.

В основном у меня есть большой массив, который я преодолеваю. Но есть внешние вещи, которые могут произойти, что делает необходимым остановить этот шаг и перейти к новой задаче. Я надеюсь, что это что-то простое, что мне просто не хватает в документах. Спасибо

Ответ 1

Можно ли остановить интервал после его завершения?

Вы можете использовать оператор .takeUntil для завершения наблюдаемого, когда некоторые другие наблюдаемые испускают. Разумеется, вам нужно будет установить другое наблюдаемое значение, чтобы испускать значения таким образом, который вам пригодится, но вот пример, который останавливает интервал через 5 секунд:

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>

Ответ 2

Просто отписаться:

import { interval } from 'rxjs';

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

...

subscription.unsubscribe();

Обратите внимание, что так как interval() является асинхронным, вы можете также вызвать unsubscribe() внутри обратного вызова subscribe.

Июль 2019: обновлено для RxJS 6.