Skip to main content

Lidando com Erros | Rxjs

  • Lidando com Erros | Rxjs

O operador catchError é usado no RxJS para capturar e tratar erros que ocorrem durante o fluxo de um Observable. Ele permite que você retorne um novo Observable ou um valor alternativo quando ocorre um erro.

O throwError é uma função que cria um Observable que emite um erro imediatamente.

Exemplo de uso:

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

of(1, 2, 3).pipe(
map(valor => {
if (valor === 2) {
throw new Error('Erro no valor 2');
}
return valor;
}),
catchError(erro => {
// Trata o erro e retorna um Observable de erro
return throwError(() => new Error('Erro tratado: ' + erro.message));
// Ou pode retornar um valor alternativo:
// return of('Valor alternativo');
})
).subscribe({
next: resultado => console.log('Resultado:', resultado),
error: erro => console.error('Erro capturado:', erro.message)
});
  • catchError: captura o erro e permite tratar ou substituir o Observable.
  • throwError: cria um Observable que emite um erro, útil para propagar ou simular erros.

Empyt | RxJS

Se você quiser tratar um erro e completar o Observable sem emitir mais valores após o erro, pode usar o operador catchError junto com o EMPTY do RxJS. O EMPTY é um Observable que apenas completa sem emitir valores.

Veja um exemplo:

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

of(1, 2, 3).pipe(
map(valor => {
if (valor === 2) {
throw new Error('Erro no valor 2');
}
return valor;
}),
catchError(erro => {
console.error('Erro capturado:', erro.message);
// Completa o Observable sem emitir mais valores
return EMPTY;
})
).subscribe({
next: resultado => console.log('Resultado:', resultado),
complete: () => console.log('Observable completo')
});