feat: add repeat requests in case of failure
This commit is contained in:
parent
194e8b0070
commit
4463d54cfb
@ -1,4 +1,6 @@
|
|||||||
export const environment = {
|
export const environment = {
|
||||||
apiUrl: 'http://localhost:5269/api/v1/',
|
apiUrl: 'http://localhost:5269/api/v1/',
|
||||||
production: false
|
production: false,
|
||||||
|
maxRetry: 30,
|
||||||
|
retryDelay: 15000
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,28 @@
|
|||||||
import {Injectable} from '@angular/core';
|
import {Injectable} from '@angular/core';
|
||||||
import {catchError, Observable, throwError} from "rxjs";
|
import {catchError, mergeMap, Observable, retryWhen, throwError, timer} from "rxjs";
|
||||||
import {HttpClient} from "@angular/common/http";
|
import {HttpClient} from "@angular/common/http";
|
||||||
import {NotifyColor, OpenNotifyService} from "@service/open-notify.service";
|
import {NotifyColor, OpenNotifyService} from "@service/open-notify.service";
|
||||||
import {environment} from "@/config/environment";
|
import {environment} from "@/config/environment";
|
||||||
|
|
||||||
|
export function retryWithInterval<T>(): (source: Observable<T>) => Observable<T> {
|
||||||
|
return (source: Observable<T>) =>
|
||||||
|
source.pipe(
|
||||||
|
retryWhen((errors: Observable<any>) =>
|
||||||
|
errors.pipe(
|
||||||
|
mergeMap((error, index) => {
|
||||||
|
if (index < (environment.maxRetry < 0 ? Infinity : environment.maxRetry - 1) && !error.status.toString().startsWith('4')) {
|
||||||
|
console.log(`Retrying after ${environment.retryDelay}ms...`);
|
||||||
|
return timer(environment.retryDelay);
|
||||||
|
} else {
|
||||||
|
console.error(`Exceeded maximum retries (${environment.maxRetry})`);
|
||||||
|
return throwError(error);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
@Injectable({
|
@Injectable({
|
||||||
providedIn: 'root'
|
providedIn: 'root'
|
||||||
})
|
})
|
||||||
@ -16,6 +35,7 @@ export class ApiService {
|
|||||||
|
|
||||||
get<Type>(endpoint: string): Observable<Type> {
|
get<Type>(endpoint: string): Observable<Type> {
|
||||||
return this.http.get<Type>(this.urlApi + endpoint).pipe(
|
return this.http.get<Type>(this.urlApi + endpoint).pipe(
|
||||||
|
retryWithInterval<Type>(),
|
||||||
catchError(error => {
|
catchError(error => {
|
||||||
this.handleError(error);
|
this.handleError(error);
|
||||||
return throwError(error);
|
return throwError(error);
|
||||||
@ -25,6 +45,7 @@ export class ApiService {
|
|||||||
|
|
||||||
post<Type>(endpoint: string, data: any): Observable<Type> {
|
post<Type>(endpoint: string, data: any): Observable<Type> {
|
||||||
return this.http.post<Type>(this.urlApi + endpoint, data).pipe(
|
return this.http.post<Type>(this.urlApi + endpoint, data).pipe(
|
||||||
|
retryWithInterval<Type>(),
|
||||||
catchError(error => {
|
catchError(error => {
|
||||||
this.handleError(error);
|
this.handleError(error);
|
||||||
return throwError(error);
|
return throwError(error);
|
||||||
@ -34,6 +55,7 @@ export class ApiService {
|
|||||||
|
|
||||||
put<Type>(endpoint: string, data: any): Observable<Type> {
|
put<Type>(endpoint: string, data: any): Observable<Type> {
|
||||||
return this.http.put<Type>(this.urlApi + endpoint, data).pipe(
|
return this.http.put<Type>(this.urlApi + endpoint, data).pipe(
|
||||||
|
retryWithInterval<Type>(),
|
||||||
catchError(error => {
|
catchError(error => {
|
||||||
this.handleError(error);
|
this.handleError(error);
|
||||||
return throwError(error);
|
return throwError(error);
|
||||||
@ -43,6 +65,7 @@ export class ApiService {
|
|||||||
|
|
||||||
delete<Type>(endpoint: string): Observable<Type> {
|
delete<Type>(endpoint: string): Observable<Type> {
|
||||||
return this.http.delete<Type>(this.urlApi + endpoint).pipe(
|
return this.http.delete<Type>(this.urlApi + endpoint).pipe(
|
||||||
|
retryWithInterval<Type>(),
|
||||||
catchError(error => {
|
catchError(error => {
|
||||||
this.handleError(error);
|
this.handleError(error);
|
||||||
return throwError(error);
|
return throwError(error);
|
||||||
|
Loading…
Reference in New Issue
Block a user