A retry plugin for Convoyr.
This plugin retries failed network requests using a configurable back-off strategy.
The plugin requires @convoyr/core
and @convoyr/angular
to be installed.
yarn add @convoyr/plugin-retry
or
npm install @convoyr/plugin-retry
The whole configuration object is optional.
import { ConvoyrModule } from '@convoyr/angular';
import { createRetryPlugin } from '@convoyr/plugin-retry';
@NgModule({
declarations: [AppComponent],
imports: [
BrowserModule,
HttpClientModule,
ConvoyrModule.forRoot({
plugins: [createRetryPlugin()],
}),
],
bootstrap: [AppComponent],
})
export class AppModule {}
You can give a partial configuration object it will be merged with default values.
Property | Type | Default value | Description |
---|---|---|---|
initialIntervalMs |
number |
300 |
Duration before the first retry. |
maxIntervalMs |
number |
10_000 |
Maximum time span before retrying. |
maxRetries |
number |
3 |
Maximum number of retries. |
shouldRetry |
RetryPredicate |
isServerOrUnknownError |
Predicate function to know which failed request should be retried. |
shouldHandleRequest |
RequestCondition |
() => true |
Predicate function to know which request the plugin should handle. |
Here is an example passing a configuration object.
Keep in mind that HTTP error is not emitted while the plugin is retrying. In the following example the HTTP error will be emitted after 10 retries, then the observable completes.
import { MemoryStorage } from '@convoyr/plugin-cache';
@NgModule({
imports: [
ConvoyrModule.forRoot({
plugins: [
createRetryPlugin({
initialIntervalMs: 500,
maxIntervalMs: 20_000,
maxRetries: 10,
shouldRetry: (response) => response.status !== 404,
shouldHandleRequest: ({ request }) =>
request.url.includes('api.github.com'),
}),
],
}),
],
})
export class AppModule {}