Tenho um comportamento estranho com minhas requisições. Se a requisição gerar um erro, uma segunda requisição será iniciada automaticamente.
Aqui está um exemplo da minha solicitação:
this.http.post(environment['url'] + '/ws/verifier/documents/list', {}, {headers}).pipe(
tap((data: any) => {
....
}),
finalize(() => {
....
}),
catchError((err: any) => {
console.debug(err);
this.notify.handleErrors(err);
return of(false);
})
).subscribe();
Como posso fazer para evitar essa solicitação duplicada se um erro for gerado?
Obrigado
EDIT: Eu tenho este interceptador. Usado para atualizar o token se o erro 401 for gerado. Mas se for outro erro, a solicitação é reenviada. Existe alguma solução para evitar isso?
intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {
return next.handle(request).pipe(
catchError((err: any) => {
if (err.status === 401) {
return this.handle401Error(request, next);
}
return next.handle(request);
})
);
}
O problema provavelmente é que você está chamando
next.handle(request)
duas vezes. Como chamar essa função passa a requisição para o próximo interceptador na cadeia, você está executando a cadeia duas vezes, portanto, a requisição está duplicada. De acordo com a documentação :O que você pode querer é isto:
Além disso, como você está passando
next
parahandle401Error
uma função, tome cuidado para não chamá-next.handle()
la, pois você pode encontrar o mesmo problema que está tendo agora.