takeUntil
takeUntil
は、指定した Observable(通知トリガー)が最初の値を発行するまで、元の Observable を購読し続ける オペレーターです。通知トリガーが発行されたタイミングで、元の Observable の購読は解除されます。
🔁 基本構文
ts
source$.pipe(
takeUntil(notifier$)
)
source$
: 元の Observable(購読対象)notifier$
: 停止を知らせる Observable(この Observable が最初の値を出すと購読が止まる)
🧪 使用例:ボタンクリックで購読停止
ts
import { interval, fromEvent } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
const stopButton = document.createElement('button');
stopButton.textContent = 'stop';
document.body.appendChild(stopButton)
const stop$ = fromEvent(stopButton, 'click');
const source$ = interval(1000); // 1秒ごとに数値を発行
source$
.pipe(takeUntil(stop$))
.subscribe((val) => console.log(`値: ${val}`));
📌 stopButton
がクリックされると、その瞬間に source$
の購読が停止されます。
✅ よくあるユースケース
- キャンセルボタンで HTTP リクエストやポーリング処理を停止したいとき
- コンポーネントのライフサイクルに応じて購読を解除したいとき
- ページ遷移やアンマウントで非同期処理を打ち切りたいとき
🔗 関連オペレーター
take
: 一定回数まで値を受け取るfirst
: 最初の1件だけを取得して終了skipUntil
: 特定の Observable が値を出すまでは無視する