W3cubDocs

/RxJS

materialize

function stable

Represents all of the notifications from the source Observable as next emissions marked with their original types within Notification objects.

materialize<T>(): OperatorFunction<T, Notification<T>>

Parameters

There are no parameters.

Returns

OperatorFunction<T, Notification<T>>: An Observable that emits Notification objects that wrap the original emissions from the source Observable with metadata.

Description

Wraps next, error and complete emissions in Notification objects, emitted as next on the output Observable.

materialize marble diagram

materialize returns an Observable that emits a next notification for each next, error, or complete emission of the source Observable. When the source Observable emits complete, the output Observable will emit next as a Notification of type "complete", and then it will emit complete as well. When the source Observable emits error, the output will emit next as a Notification of type "error", and then complete.

This operator is useful for producing metadata of the source Observable, to be consumed as next emissions. Use it in conjunction with dematerialize.

Example

Convert a faulty Observable to an Observable of Notifications

import { of } from 'rxjs';
import { materialize, map } from 'rxjs/operators';

const letters = of('a', 'b', 13, 'd');
const upperCase = letters.pipe(map(x => x.toUpperCase()));
const materialized = upperCase.pipe(materialize());
materialized.subscribe(x => console.log(x));

// Results in the following:
// - Notification {kind: "N", value: "A", error: undefined, hasValue: true}
// - Notification {kind: "N", value: "B", error: undefined, hasValue: true}
// - Notification {kind: "E", value: undefined, error: TypeError:
//   x.toUpperCase is not a function at MapSubscriber.letters.map.x
//   [as project] (http://1…, hasValue: false}

See Also

© 2015–2018 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/materialize