如何在RxJS中停止Observable的间隔

sel*_*c82 20 javascript observable rxjs rxjs5

我有一个特定的情况,我正在使用RxJS间隔,但在任何给定的时刻,我可能需要停止该间隔.我假设有一些像cancel()或stop()这样容易的东西.与clearTimeout类似.这可以在一段时间后停止一段时间吗?如果没有,那将是另一种方法.

基本上我有一个大型阵列,我正在逐步完成.但是有些外部事情可能会发生,因此必须停止这一步并继续执行新任务.我希望这些东西很简单,我只是在文档中遗漏了.谢谢

Nic*_*wer 26

这可以在一段时间后停止一段时间吗?

.takeUntil当其他一些可观察的发射时,您可以使用运算符来完成一个observable.您当然需要将其他可观察对象设置为以对您有用的方式发出值,但这是一个在5秒后停止间隔的示例:

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

  • 谢谢,我最终使用了 **takeWhile** `Observable.interval( 100 ).takeWhile( val =&gt; takeUntil ).subscribe( val =&gt; { ...` (4认同)

mar*_*tin 15

只需取消订阅:

import { interval } from 'rxjs';

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

...

subscription.unsubscribe();
Run Code Online (Sandbox Code Playgroud)

请注意,您也可以interval()unsubscribe()回调内部调用.

  • `subscribe` 导致命令式响应式代码,特别是当意图是 `unsubscribe` 时。这在小尺度上更容易构建,但在大尺度上更难维护。例如 https://medium.com/@benlesh/rxjs-dont-unsubscribe-6753ed4fda87 建议避免这种情况。 (2认同)
  • 我冒昧地创建了一个 [jsfiddle](https://jsfiddle.net/anied/ruzqty4k/8/),您可以在其中看到此解决方案的实际效果。 (2认同)