W3cubDocs

/RxJS

windowCount

function stable

Branch out the source Observable values as a nested Observable with each nested Observable emitting at most windowSize values.

windowCount<T>(windowSize: number, startWindowEvery: number = 0): OperatorFunction<T, Observable<T>>

Parameters

windowSize

The maximum number of values emitted by each window.

startWindowEvery

Optional. Default is 0.

Interval at which to start a new window. For example if startWindowEvery is 2, then a new window will be started on every other value from the source. A new window is started at the beginning of the source by default.

Returns

OperatorFunction<T, Observable<T>>: An Observable of windows, which in turn are Observable of values.

Description

It's like bufferCount, but emits a nested Observable instead of an array.

windowCount marble diagram

Returns an Observable that emits windows of items it collects from the source Observable. The output Observable emits windows every startWindowEvery items, each containing no more than windowSize items. When the source Observable completes or encounters an error, the output Observable emits the current window and propagates the notification from the source Observable. If startWindowEvery is not provided, then new windows are started immediately at the start of the source and when each window completes with size windowSize.

Examples

Ignore every 3rd click event, starting from the first one

import { fromEvent } from 'rxjs';
import { windowCount, map, mergeAll, skip } from 'rxjs/operators';

const clicks = fromEvent(document, 'click');
const result = clicks.pipe(
  windowCount(3),
  map(win => win.pipe(skip(1))), // skip first of every 3 clicks
  mergeAll()                     // flatten the Observable-of-Observables
);
result.subscribe(x => console.log(x));

Ignore every 3rd click event, starting from the third one

import { fromEvent } from 'rxjs';
import { windowCount, mergeAll } from 'rxjs/operators';

const clicks = fromEvent(document, 'click');
const result = clicks.pipe(
  windowCount(2, 3),
  mergeAll(),              // flatten the Observable-of-Observables
);
result.subscribe(x => console.log(x));

See Also

© 2015–2018 Google, Inc., Netflix, Inc., Microsoft Corp. and contributors.
Code licensed under an Apache-2.0 License. Documentation licensed under CC BY 4.0.
https://rxjs.dev/api/operators/windowCount