Уроки37. finalize: cleanup после завершения или ошибки
Уроки · 37
37. finalize: cleanup после завершения или ошибки
finalize — уборка «в любом случае»
Помните teardown из четвёртого урока? Он позволял делать cleanup внутри Observable. Но иногда уборка нужна на уровне pipe — после конкретной цепочки операторов. Для этого есть finalize.
finalize(fn) выполняет функцию fn в трёх случаях:
- Поток успешно завершился (
complete). - Поток упал с ошибкой (
error). - Подписчик отписался (
unsubscribe).
Классический Angular-пример
this.loading = true;
this.http.get(...).pipe(
finalize(() => this.loading = false)
).subscribe(...)
// независимо от исхода — индикатор уйдёт
Порядок логов
Важно: finalize выполняется после complete подписчика, а не до. Поэтому в этом уроке порядок будет: Value: Data → Complete → Cleanup.
Что нужно сделать
- В
pipeдобавьтеfinalize(() => console.log('Cleanup')).
Решение spoiler · click to reveal
const { of, finalize } = Rx;
const request$ = of('Data').pipe(
finalize(() => console.log('Cleanup'))
);
request$.subscribe({
next: value => console.log('Value: ' + value),
complete: () => console.log('Complete'),
}); script.ts
CONSOLE · Console Output
Нажмите на запуск, чтобы увидеть результат...