ngx-http-retry
A configurable Angular HTTP interceptor to retry GET request and respond to errors and flaky connections.
Installation
To install this library, run:
npm install ngx-http-retry --save
-or- yarn add ngx-http-retry
and then import and configure it in your Angular AppModule
:
import { NgxHttpRetryModule } from 'ngx-http-retry';
@NgModule({
imports: [
NgxHttpRetryModule.forRoot()
],
providers: [serverUnavailableRetryStrategyProvider],
bootstrap: [AppComponent]
})
export class AppModule { }
Usage
You provide a collection of injectable classes that implement HttpRequestRetryStrategy
interface
using the HTTP_REQUEST_RETRY_STRATEGIES
InjectionToken
. This is how you tell ngx-http-retry
which status codes to retry, how many times to retry, and when to stop retrying.
In addition to being thrown by the http request observable like normal, the last HttpErrorResponse
before ngx-http-retry
stops retrying a request is 1) passed to the retry strategy's onFailure
method and 2) emitted on the NgxHttpRetryService
's httpRetryFailures
observable.
Implementing HttpRequestRetryStrategy
import { HttpRequestRetryStrategy } from 'ngx-http-retry';
@Injectable()
export class ServerUnavailableRetryStrategy implements HttpRequestRetryStrategy {
readonly statuses = [503];
readonly maxCount = 10;
delayFn() {
return 100;
}
onFailure(error: HttpErrorResponse) {
console.log('When ngx-http-retry stops retrying a request, the final error is passed back to the retry strategy.', error.status, error.url);
}
}
export const serverUnavailableRetryStrategyProvider: Provider = {
provide: HTTP_REQUEST_RETRY_STRATEGIES,
useClass: ServerUnavailableRetryStrategy,
multi: true
};
Using NgxHttpRetryService (optional)
import { NgxHttpRetryService } from 'ngx-http-retry';
export class MyComponent implements OnInit {
constructor(private readonly ngxHttpRetryService: NgxHttpRetryService) { }
ngOnInit() {
this.ngxHttpRetryService.httpRetryFailures.subscribe(error => {
console.log('You can also listen to errors from all retry strategies in one place.', error.status, error.url);
});
}
}
License
MIT © Kevin Phelps