Subscriber: addTeardown() 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 addTeardown() method of the Subscriber interface registers a callback to clean up resources when the subscription ends. This happens when either Subscriber.complete() or Subscriber.error() is called, or when all observers unsubscribe.
Note:
This shared-subscription behavior may change. A proposal to give each observer its own Subscriber would make each subscription start a separate execution instead of reusing an active subscription.
The producer calls this method from the callback supplied to the Observable() constructor. Calling addTeardown() registers the cleanup function; it does not end the subscription.
Syntax
addTeardown(callback)
Parameters
callback-
A callback function that takes no arguments and runs when the subscription ends. Its return value is ignored, so a returned promise is not awaited.
Return value
None (undefined).
Description
Callbacks registered while the subscriber is active run synchronously, in reverse registration order, after active becomes false and signal is aborted. When the producer calls complete() or error(), teardown callbacks run before the corresponding observer callbacks.
If the subscriber is already inactive when addTeardown() is called, the supplied callback runs immediately. If a teardown callback throws, the exception is reported to the global object and the remaining teardown callbacks still run.
Examples
>Callback order
This example registers two teardown callbacks before completion and one afterward. The first two run in reverse registration order, before the observer's complete() callback; the last runs immediately when it is registered.
const observable = new Observable((subscriber) => {
subscriber.addTeardown(() => console.log("First registered"));
subscriber.addTeardown(() => console.log("Second registered"));
subscriber.complete();
subscriber.addTeardown(() => console.log("Registered after completion"));
});
observable.subscribe({
complete() {
console.log("Complete");
},
});
// Second registered
// First registered
// Complete
// Registered after completion
See the main Subscriber reference page for a basic example, and Creating custom observables for additional examples.
Specifications
| Specification |
|---|
| Observable> # dom-subscriber-addteardown> |