banner
Tomorrow

Tomorrow

不骄不躁
twitter

RxJS —— サブスクリプションの購読

サブスクリプション は、通常は Observable の実行を表す、操作可能なリソースを示すオブジェクトです。

サブスクリプションには、リソースを解放したり Observable の実行をキャンセルしたりするための重要な unsubscribe メソッドがあります。

import { interval } from 'rxjs';

const observable = interval(1000);
const subscription = observable.subscribe((x) => console.log(x));

subscription.unsubscribe();

サブスクリプションは本質的に unsubscribe() 関数しか持たず、リソースを解放したり Observable の実行をキャンセルしたりします。

また、複数のサブスクリプションを一緒にすることで、1 つのサブスクリプションの unsubscribe() を呼び出すことで複数のサブスクリプションをキャンセルすることもできます。これは、1 つのサブスクリプションを別のサブスクリプションに「追加」することで実現できます:

import { interval } from 'rxjs';

const observable1 = interval(300);
const observable2 = interval(400);

const subscription = observable1.subscribe((x) => console.log('first: ' + x));
const childSubscription = observable2.subscribe((x) => console.log('second: ' + x));

subscription.add(childSubscription);

setTimeout(() => {
	subscription.unsubscribe();
}, 1000);

// ログ:
// first: 0
// second: 0
// first: 1
// second: 1
// first: 2

サブスクリプションには、追加された子サブスクリプションを取り消すための remove(otherSubscription) メソッドもあります。

import { interval } from 'rxjs';

const observable1 = interval(300);
const observable2 = interval(400);

const subscription = observable1.subscribe((x) => console.log('first: ' + x));
const childSubscription = observable2.subscribe((x) => console.log('second: ' + x));

subscription.add(childSubscription);
subscription.remove(childSubscription);

setTimeout(() => {
	subscription.unsubscribe();
}, 1000);

// ログ:
// first: 0
// second: 0
// first: 1
// second: 1
// first: 2
// second: 2
// second: 3
// second: 4
// ...

remove の後でも、childSubscription は新しい値を受け取ることができることがわかります。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。