catchError()
Esse operador é executado caso seja lançada alguma exceção na stream de dados do Observable
ou ao ser executado a chamada do metódo de callback error
dentro do Observable
.
Exemplo
import { catchError, map, Observable } from 'rxjs';
interface UserEntity {
id: number;
name: string;
}
interface User {
name: string;
}
const userEntitiesObservable: Observable<UserEntity[]> = new Observable<
UserEntity[]
>((subscribe) => {
subscribe.next([
{
id: 1,
name: 'Joana',
},
{
id: 2,
name: 'Jhon',
},
{
id: 3,
name: 'Joan',
},
]);
subscribe.complete();
});
const mapNameUsers: Observable<User[]> = userEntitiesObservable.pipe(
map((userEntities: UserEntity[]) => {
const invalidUser = userEntities.some((userEntity) => userEntity.id === 2);
if (invalidUser) {
throw new Error('User error');
}
return userEntities.map((userEntity: UserEntity) => ({
name: userEntity.name,
}));
}),
catchError((error: Error) => {
console.error('userEntitiesObservable error:', error.message);
throw error;
}),
);
function executeMapNameUsers() {
mapNameUsers.subscribe({
next: (user) => {
console.log('executeMapNameUsers next', user);
/*
{
name: 'Joana',
}
*/
},
error: (error: Error) => {
console.error('executeMapNameUsers error:', error.message);
/*
User error
*/
},
});
}
export { executeMapNameUsers };
Para visualizar a implementação desse fluxo acessar:
Exemplo com nest-js
No projeto está implementado no operador personalizado de logs que é utilizado nas camadas: Repository
, Application
e Interface
.
git - Operador para tratar logs