skipUntil and skipWhile Operator in Angular

Introduction

The skipUntil() and skipWhile() operators in RxJS are used to control when values emitted by an observable are propagated to subscribers based on certain conditions. These operators are commonly used in Angular applications to filter out or delay emissions from observables based on specific criteria. Let's explore each operator in detail with examples.

skipUntil()

The skipUntil() operator ignores values emitted by the source observable until a second "notifier" observable emits its first value. Once the notifier emits, skipUntil() begins forwarding values from the source observable to subscribers.

Example

Suppose you have an observable that emits numbers every second and a notifier observable that emits a value after 5 seconds. You can use skipUntil() to skip the initial emissions until the notifier emits its first value.

import { interval, timer } from 'rxjs';
import { skipUntil } from 'rxjs/operators';

// Source observable emitting numbers every second
const sourceObservable = interval(1000);

// Notifier observable emitting a value after 5 seconds
const notifierObservable = timer(5000);

// Use skipUntil to ignore emissions from source until notifier emits
sourceObservable.pipe(
  skipUntil(notifierObservable)
).subscribe(
  value => console.log('Received value:', value)
);

In this example

  • sourceObservable emits numbers (0, 1, 2, 3, ...) every second.
  • notifierObservable emits a value after 5 seconds.
  • skipUntil(notifierObservable) delays forwarding emissions from sourceObservable until notifierObservable emits its first value (after 5 seconds). After that, all subsequent emissions from sourceObservable are forwarded to the subscriber.

skipWhile()

The skipWhile() operator ignores values emitted by the source observable until a specified condition becomes false. Once the condition is false for the first time, skipWhile() begins forwarding values from the source observable to subscribers.

Example

Suppose you have an observable that emits numbers and you want to skip values until a number greater than 5 is emitted. You can use skipWhile() to achieve this.

import { of } from 'rxjs';
import { skipWhile } from 'rxjs/operators';

// Source observable emitting numbers
const sourceObservable = of(1, 2, 3, 7, 8, 4, 9);

// Use skipWhile to skip emissions until a number greater than 5 is emitted
sourceObservable.pipe(
  skipWhile(value => value <= 5)
).subscribe(
  value => console.log('Received value:', value)
);

In this example

  • sourceObservable emits a sequence of numbers (1, 2, 3, 7, 8, 4, 9).
  • skipWhile(value => value <= 5) skips emitting values from sourceObservable until it encounters a number greater than 5 (7). After that, all subsequent emissions (7, 8, 4, 9) are forwarded to the subscriber.

Summary

  • skipUntil(): Ignores emissions from the source observable until a specified "notifier" observable emits its first value, after which all subsequent emissions are forwarded.
  • skipWhile(): Ignores emissions from the source observable until a specified condition becomes false for the first time, after which all subsequent emissions are forwarded.

These operators are useful for controlling when values emitted by observables are propagated based on specific conditions or trigger events. They allow you to filter out unwanted emissions and focus on relevant data streams in Angular applications, improving efficiency and control over observable streams.