Streams are stateless and don’t store any data nevertheless, sometimes useful to be able to temporarily cache some events and throw a batch of them
const interval$ = rxjs.interval(2000)
const bufferBy$ = rxjs.fromEvent(document, 'click')
interval$.pipe(rxjs.operators.buffer(bufferBy$))
Collects values from the past as an array, and emits that array only when another Observable emits | Collect output values until provided observable emits, emit as array
const interval$ = rxjs.interval(1000)
//After three values are emitted, pass on as an array of buffered values
interval$.pipe(rxjs.operators.bufferCount(3))
Collect emitted values until provided number is fulfilled, emit as array
const interval$ = rxjs.interval(1000)
//After two seconds, emit buffered values as an array
interval$.pipe(rxjs.operators.bufferTime(2000))
Collects values from the past as an array, and emits those arrays periodically in time
const interval$ = rxjs.interval(2000)
const bufferBy$ = rxjs.fromEvent(document, 'click')
interval$.pipe(rxjs.operators.bufferWhen(() => bufferBy$))
Collects values from the past as an array. When it starts collecting values, it calls a function that returns an Observable that tells when to close the buffer and restart collecting
const sourceInterval$ = rxjs.interval(1000)
const startInterval$ = rxjs.interval(5000)
// val will be the startInterval$ value emitted
const closingInterval$ = (val) => rxjs.interval(1000)
//every 5s a new buffer will start, collecting emitted values for 1s then emitting buffered values
sourceInterval$.pipe(rxjs.operators.bufferToggle(
startInterval$,
closingInterval$
)
Collects values from the past as an array. Starts collecting only when opening emits, and calls the closingSelector function to get an Observable that tells when to close the buffer