コンテンツにスキップ

withBuffered (withBufferedFrom)

ソース Observable からの値をバッファリングし、親が発行する際に親の値と一緒に発行します。 バッファは各発行後にクリアされます。

Timeline of observable eventsABCTimeline of observable events12
withBufferedFrom(data$)
Timeline of observable events1,AB2,C
// Timeline:
//
// data$ d1 d2 d3 d4 d5 d6 d7 d8
// trigger$ T1 T2 T3
// result$ [T1,[d1,d2,d3]] [T2,[d4,d5,d6]] [T3,[d7,d8]]
//
// Explanation:
// - withBufferedFrom collects values from the source observable
// - When the trigger emits, it emits a tuple of [triggerValue, bufferedValues]
// - Buffer is cleared after each emission
// - Useful for batching data collection triggered by events
const data$ = source<string>();
const trigger$ = source<number>();
const result$ = trigger$.pipe(withBufferedFrom(data$));
const valueHistory: (readonly [number, readonly string[]])[] = [];
result$.subscribe(([triggerValue, bufferedData]) => {
valueHistory.push([triggerValue, bufferedData]);
});
data$.next('A');
data$.next('B');
trigger$.next(1);
assert.deepStrictEqual(valueHistory, [[1, ['A', 'B']]]);
data$.next('C');
trigger$.next(2);
assert.deepStrictEqual(valueHistory, [
[1, ['A', 'B']],
[2, ['C']],
]);

View source on GitHub