Boa noite,
Tenho um requisição que frequentemente retorna timeout na primeira tentativa. Para contornar o problema gostaria de capturar o erro de timeout e refazer a mesmo requisição. Poderia me dar um exemplo de como ficaria esse código?
Boa noite,
Tenho um requisição que frequentemente retorna timeout na primeira tentativa. Para contornar o problema gostaria de capturar o erro de timeout e refazer a mesmo requisição. Poderia me dar um exemplo de como ficaria esse código?
Olá Diego, tudo bem com você?
Peço desculpas pela demora em obter um retorno.
Para refazer a requisição, você pode utilizar o operador retry
do RxJS para refazer a requisição em caso de erro. Por exemplo:
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable, throwError } from 'rxjs';
import { catchError, retry } from 'rxjs/operators';
@Injectable()
export class DataService {
constructor(private http: HttpClient) {}
public fazerRequisicao(): Observable<any> {
const url = 'https://exemplo.com/api/requisicao';
return this.http.get(url).pipe(
retry(2),
catchError((error) => {
if (error.status === 408) {
console.log('Erro de timeout. Tentando novamente...');
return this.fazerRequisicao();
} else {
return throwError(error);
}
})
);
}
}
No exemplo acima, o operador retry
está definido com 2 tentativas. Ou seja, caso ocorra um erro na primeira tentativa, o operador irá tentar novamente mais duas vezes. Além disso, dentro do bloco catchError, verificamos se o erro é um erro de timeout
(status HTTP 408). Se for, fazemos uma chamada recursiva para o método fazerRequisicao()
para refazer a requisição. Caso contrário, retornamos o erro original utilizando throwError
.
Vale ressaltar que na próxima aula catchError e throwError a instrutora irá ensinar a trabalhar com manipulação de erros no Angular. Todavia, deixo também a documentação do método retry caso queira se aprofundar:
Espero ter ajudado. Continue mergulhando em conhecimento e não hesite em voltar ao fórum para continuar aprendendo e interagindo com a comunidade.
Abraços e bons estudos!