windowToggle

function stable

Branch out the source Observable values as a nested Observable starting from an emission from openings and ending when the output of closingSelector emits.

windowToggle<T, O>(openings: ObservableInput<O>, closingSelector: (openValue: O) => ObservableInput<any>): OperatorFunction<T, Observable<T>>

Parameters

openings

An observable of notifications to start new windows.

closingSelector

A function that takes the value emitted by the openings observable and returns an Observable, which, when it emits a next notification, signals that the associated window should complete.

Returns

OperatorFunction<T, Observable<T>>: A function that returns an Observable of windows, which in turn are Observables.

Description

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

windowToggle marble diagram

Returns an Observable that emits windows of items it collects from the source Observable. The output Observable emits windows that contain those items emitted by the source Observable between the time when the openings Observable emits an item and when the Observable returned by closingSelector emits an item.

Example

Every other second, emit the click events from the next 500ms

import { fromEvent, interval, EMPTY } from 'rxjs';
import { windowToggle, mergeAll } from 'rxjs/operators';

const clicks = fromEvent(document, 'click');
const openings = interval(1000);
const result = clicks.pipe(
  windowToggle(openings, i => i % 2 ? interval(500) : EMPTY),
  mergeAll()
);
result.subscribe(x => console.log(x));

See Also

© 2015–2021 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/windowToggle