Observable: every() method

Limited availability

This feature is not Baseline because it does not work in some of the most widely-used browsers.

Experimental: This is an experimental technology
Check the Browser compatibility table carefully before using this in production.

The every() method of the Observable interface returns a promise that fulfills with a boolean indicating whether every value emitted by the source observable satisfies the provided testing function.

Syntax

js
every(predicate)
every(predicate, options)

Parameters

predicate

A function to execute for each value emitted by the source observable. It should return a truthy value to indicate the value passes the test, and a falsy value otherwise. The function is called with the following arguments:

value

The current value being processed.

index

The index of the current value being processed, starting from 0.

options Optional

An options object containing the following properties:

signal Optional

An AbortSignal that can be used to cancel the operation. Aborting the signal unsubscribes from the source and rejects the promise with the signal's reason. If the signal is already aborted, the promise rejects without subscribing to the source.

Return value

A Promise that fulfills with false as soon as predicate returns a falsy value, or true when the source completes without any value failing the test. If the source completes without emitting any values, the promise fulfills with true.

If the source errors or predicate throws an exception, the promise rejects with that error. If the operation is aborted, the promise rejects with the abort reason.

Description

Like other promise-returning operators, this method subscribes to the source immediately when called. It does not require a separate call to subscribe().

When predicate returns a falsy value, every() unsubscribes from the source without waiting for it to complete. If the source never completes and all values pass the test, the promise remains pending unless the operation errors or is aborted.

The return value of predicate is converted to a boolean without awaiting it. An async function returns a truthy promise object regardless of its eventual result, so it cannot be used as an asynchronous test.

If predicate throws an exception, the operation unsubscribes from the source.

Examples

Using every()

This example checks whether Shift is held for each of the first three button clicks. It reports false as soon as a click fails the test, or true after all three pass. Click Restart after the stream ends to try again.

js
const btn = document.querySelector("button");
const output = document.querySelector("p");

const restart = document.querySelector("#restart");

function start() {
  restart.disabled = true;
  output.textContent = "Waiting for clicks";
  btn
    .when("click")
    .take(3)
    .every((event) => event.shiftKey)
    .then((result) => {
      restart.disabled = false;
      output.textContent = result;
    });
}

restart.when("click").subscribe(start);
start();

Specifications

Specification
Observable
# dom-observable-every

Browser compatibility

See also