finalize
Returns an Observable that mirrors the source Observable, but will call a specified function when the source terminates on complete or error. The specified function will also be called when the subscriber explicitly unsubscribes.
Examples
Execute callback function when the observable completes
import { interval, take, finalize } from 'rxjs';
// emit value in sequence every 1 second
const source = interval(1000);
const example = source.pipe(
take(5), //take only the first 5 values
finalize(() => console.log('Sequence complete')) // Execute when the observable completes
);
const subscribe = example.subscribe(val => console.log(val));
// results:
// 0
// 1
// 2
// 3
// 4
// 'Sequence complete'
Execute callback function when the subscriber explicitly unsubscribes
import { interval, finalize, tap, noop, timer } from 'rxjs';
const source = interval(100).pipe(
finalize(() => console.log('[finalize] Called')),
tap({
next: () => console.log('[next] Called'),
error: () => console.log('[error] Not called'),
complete: () => console.log('[tap complete] Not called')
})
);
const sub = source.subscribe({
next: x => console.log(x),
error: noop,
complete: () => console.log('[complete] Not called')
});
timer(150).subscribe(() => sub.unsubscribe());
// results:
// '[next] Called'
// 0
// '[finalize] Called'