web-dev-qa-db-ja.com

RxJSのObservableで間隔を停止する方法

RxJS間隔を使用している特定の状況がありますが、特定の瞬間にその間隔を停止する必要がある場合があります。 cancel()やstop()のような簡単なものがあると思いました。 clearTimeoutと同様です。これは、それが起こったら間隔を停止することは可能ですか?そうでない場合、別のアプローチになります。

基本的に、私はステップ実行している大きな配列を持っています。しかし、発生する可能性のある外部の事柄があり、そのステップスルーを停止して新しいタスクに進む必要があります。私はそれがドキュメントで欠けているだけの簡単なものであることを望んでいます。ありがとう

19
selanac82

これは、それが起こったら間隔を停止することは可能ですか?

.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>
24
Nicholas Tower

退会するだけです:

_import { interval } from 'rxjs';

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

...

subscription.unsubscribe();
_

interval()は非同期なので、subscribeのコールバック内でunsubscribe()を呼び出すこともできます。

2019年7月:RxJS 6用に更新されました。

10
martin