コンテンツにスキップ

takeWhile

述語が true を返す間、ソース Observable からの値を発行します。 述語が false を返すと即座に完了します。

Timeline of observable events123456712
takeWhile(x => x < 5)
Timeline of observable events1234
// Timeline:
//
// num$ 1 2 3 4 5 6 1 2 (ignored)
// taken$ 1 2 3 4 | (completes)
//
// Explanation:
// - takeWhile emits values while the predicate returns true
// - Completes immediately when the predicate returns false
// - No further values are emitted after completion
const num$ = source<number>();
const taken$ = num$.pipe(takeWhile((x) => x < 5));
const valueHistory: number[] = [];
taken$.subscribe((x) => {
valueHistory.push(x);
});
num$.next(1); // logs: 1
assert.deepStrictEqual(valueHistory, [1]);
num$.next(2); // logs: 2
num$.next(3); // logs: 3
num$.next(4); // logs: 4
assert.deepStrictEqual(valueHistory, [1, 2, 3, 4]);
num$.next(5); // nothing logged (completes)
assert.deepStrictEqual(valueHistory, [1, 2, 3, 4]);
num$.next(6); // nothing logged (already completed)
assert.deepStrictEqual(valueHistory, [1, 2, 3, 4]);
num$.next(1); // logs: 1
assert.deepStrictEqual(valueHistory, [1, 2, 3, 4]);

View source on GitHub