この記事ではRxJSの『takeWhileオペレータ』について、以下の内容を図とサンプルコードを用いて分かりやすく解説します。
takeWhile
オペレータとはtakeWhile
オペレータの「使い方」takeWhile
オペレータの「特徴」
RxJSのtakeWhileとは

RxJSのtakeWhile
は、Observableの値を条件が満たされている間は流し続け、条件が満たされなくなった時点でObservableを完了させるオペレータです。
以下にtakeWhile
を用いたサンプルコードを示します。
import { of } from 'rxjs';
import { takeWhile } from 'rxjs/operators';
const source$ = of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
// 値が5未満の間は流し続ける
const filtered$ = source$.pipe(takeWhile((value) => value < 5));
filtered$.subscribe((value) => console.log(value));
// 出力結果
// 1
// 2
// 3
// 4
上記のサンプルコードでは、takeWhile
を使用して、source$
の値が5
未満の間はデータを流し続け、5
以上になった時点でObservableが完了します。
takeWhileの特徴
takeWhile
の特徴を以下に示します。
- 条件が
false
になった時点でストリームが完了するtakeWhile
は、条件がfalse
になった瞬間にObservableの発行を停止し、完了する。- 一度でも条件が
false
になったら、その後の値は流れない。
inclusive
オプションを指定すると条件がfalseになった値を1回だけ出力する
上記の特徴が分かるサンプルコードをこれから説明します。
条件がfalseになった時点でストリームが完了する
takeWhile
は、条件がfalse
になった瞬間にObservableの発行を停止し、完了します。サンプルコードを以下に示します。
import { of } from 'rxjs';
import { takeWhile } from 'rxjs/operators';
const source$ = of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
const filtered$ = source$.pipe(takeWhile((value) => value !== 5));
filtered$.subscribe((value) => console.log(value));
// 出力結果
// 1
// 2
// 3
// 4
このコードでは、値が5
になった時点でストリームが完了するため、6
以降の値は発行されません。
inclusiveオプションを指定すると条件がfalseになった値を1回だけ出力する
takeWhile
にはinclusive
オプション(デフォルトはfalse
)があり、これをtrue
に設定すると、条件がfalse
になった値を1回だけ出力した後にストリームを完了させます。サンプルコードを以下に示します。
import { of } from 'rxjs';
import { takeWhile } from 'rxjs/operators';
const source$ = of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
const filtered$ = source$.pipe(takeWhile((value) => value !== 5, true));
filtered$.subscribe((value) => console.log(value));
// 出力結果
// 1
// 2
// 3
// 4
// 5
通常のtakeWhile
では5
は出力されませんが、inclusive
オプションにtrue
を指定することで5
が出力された後にストリームが完了します。
本記事のまとめ
この記事ではRxJSの『takeWhileオペレータ』について、以下の内容を説明しました。
takeWhile
は、条件が満たされている間は値を流し、満たされなくなった時点でストリームを完了させる。- 一度でも条件が
false
になったら、その後の値は流れない。 inclusive: true
オプションを指定すると、条件がfalse
になった値を1回だけ出力してから完了する。
takeWhile
は、特定の条件が満たされる間だけデータを取得したい場合に便利なオペレータです。例えば、ユーザーの入力が一定の条件を満たしている間だけ処理を続けるようなケースで活用できます。
お読み頂きありがとうございました。