Observable: last() 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 last() method of the Observable interface returns a promise that fulfills with the last value emitted by the source observable.

Syntax

js
last()
last(options)

Parameters

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 resolves to the last value emitted by the source observable when the source completes. If the source completes without emitting any values, the promise rejects with a RangeError.

If the source errors, 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().

last() keeps the most recent value and waits for the source to complete. If the source never completes, the promise remains pending unless the operation errors or is aborted.

If the selected value is a promise, the returned promise adopts its eventual state rather than fulfilling with the promise object itself.

Examples

Using last()

This example waits for three button clicks, then displays the coordinates of the last click. 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)
    .last()
    .then((result) => {
      restart.disabled = false;
      output.textContent = `${result.clientX},${result.clientY}`;
    });
}

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

Specifications

Specification
Observable
# dom-observable-last

Browser compatibility

See also