rxjs / 7.5.5 / api / index / function / last.html /

last

function stable operator

Returns an Observable that emits only the last item emitted by the source Observable. It optionally takes a predicate function as a parameter, in which case, rather than emitting the last item from the source Observable, the resulting Observable will emit the last item from the source Observable that satisfies the predicate.

last<T, D>(predicate?: (value: T, index: number, source: Observable<T>) => boolean, defaultValue?: D): OperatorFunction<T, T | D>

Parameters

predicate (value: T, index: number, source: Observable<T>) => boolean

Optional. Default is undefined.

The condition any source emitted item has to satisfy.

defaultValue D

Optional. Default is undefined.

An optional default value to provide if last predicate isn't met or no values were emitted.

Returns

OperatorFunction<T, T | D>: A function that returns an Observable that emits only the last item satisfying the given condition from the source, or a NoSuchElementException if no such items are emitted.

Throws

EmptyError Delivers an EmptyError to the Observer's error callback if the Observable completes before any next notification was sent.

Error - Throws if no items that match the predicate are emitted by the source Observable.

Description

last marble diagram

It will throw an error if the source completes without notification or one that matches the predicate. It returns the last value or if a predicate is provided last value that matches the predicate. It returns the given default value if no notification is emitted or matches the predicate.

Examples

Last alphabet from the sequence

import { from, last } from 'rxjs';

const source = from(['x', 'y', 'z']);
const result = source.pipe(last());

result.subscribe(value => console.log(`Last alphabet: ${ value }`));

// Outputs
// Last alphabet: z

Default value when the value in the predicate is not matched

import { from, last } from 'rxjs';

const source = from(['x', 'y', 'z']);
const result = source.pipe(last(char => char === 'a', 'not found'));

result.subscribe(value => console.log(`'a' is ${ value }.`));

// Outputs
// 'a' is not found.

Overloads

last(predicate: BooleanConstructor): OperatorFunction<T, TruthyTypesOf<T>>

Parameters

predicate BooleanConstructor

Returns

OperatorFunction<T, TruthyTypesOf<T>>

last(predicate: BooleanConstructor, defaultValue: D): OperatorFunction<T, TruthyTypesOf<T> | D>

Parameters

predicate BooleanConstructor
defaultValue D

Returns

OperatorFunction<T, TruthyTypesOf<T> | D>

last(predicate?: null, defaultValue?: D): OperatorFunction<T, T | D>

Parameters

predicate null

Optional. Default is undefined.

defaultValue D

Optional. Default is undefined.

Returns

OperatorFunction<T, T | D>

last(predicate: (value: T, index: number, source: Observable<T>) => value is S, defaultValue?: S): OperatorFunction<T, S>

Parameters

predicate (value: T, index: number, source: Observable<T>) => value is S
defaultValue S

Optional. Default is undefined.

Returns

OperatorFunction<T, S>

last(predicate: (value: T, index: number, source: Observable<T>) => boolean, defaultValue?: D): OperatorFunction<T, T | D>

Parameters

predicate (value: T, index: number, source: Observable<T>) => boolean
defaultValue D

Optional. Default is undefined.

Returns

OperatorFunction<T, T | D>

See Also

© 2015–2022 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/index/function/last