1.3.1 • Published 2 years ago
fetch-retry-ts v1.3.1
fetch-retry-ts
Adds retry functionality to fetch().
Installation
npm install fetch-retry-tsUsage
import originalFetch from 'isomorphic-fetch';
import fetchBuilder from 'fetch-retry-ts';
const options = {
retries: 3,
retryDelay: 1000,
retryOn: [419, 503, 504],
};
const fetch = fetchBuilder(originalFetch, options);
fetch('https://example.com/').then(/* ... */);fetch-retry-ts exports a function, which is used to build the new fetch()-compatible function supporting the retry logic.
It accepts two arguments:
fetch(required): the originalfetch()function (fromisomorphic-fetchetc)defaults(optional): default values for the retry logic:retries?: number: number of attempts to make (3 by default);retryDelay?: number | () => number | (attempt: number, error: Error | null, response: Response | null) => number: delay between attempts (in ms). If specified as a function, the function accepts the following parameters:attempt: the number of the current attempt;error:Errorobject coming fromfetch()when it rejects on a network failure, ornull;response:Responseornulliferror !== nullIt should return an integer, which is treated as the delay in ms before the enxt attempt is made. The default value forretryDelayis1000.retryOn?: number[] | (attempt: number, retries: number, error: Error | null, response: Response | null) => boolean: if specified as an array of integers, it is treated as a list of HTTP codes which trigger retry. When specified as a function, that functoin accepts the same parameters as the one described inretryDelay, and an additional parameter calledretries, whcih is the number of configured retries. The function should return a truthy value if the request should be retried. IfretryOnis a function,retriesis ignored. The default value forretryOnin[429, 503, 504]. It returns a function to be used instead offetch().
The returned function accepts the same arguments as fetch(input: RequestInfo, init?: RequestInit), and three additional properties in init object. Those are retries, retryDelay, and retryOn.
Examples
Retry on any 5xx Error
fetch(url, {
retryOn: (attempt: number, retries: number, error: Error | null, response: Response | null): boolean => (
attempt < retries && (!!error || !response || response.status >= 500)
),
}).then(/* ... */)Retry only on Network Failures
fetch(url, {
retryOn: [],
}).then(/* ... */)Do not retry on Network Failures
fetch(url, {
retryOn: (attempt: number, retries: number, error: Error | null, response: Response | null): boolean => (
attempt < retries && error === null /* && additional logic to check response code */
),
}).then(/* ... */)Exponential Backoff
fetch(url, {
retryDelay: (attempt: number, error: Error | null, response: Response | null): number => (
Math.pow(2, attempt) * 1000
),
}).then(/* ... */)1.3.1
2 years ago
1.3.0
2 years ago
1.2.0
2 years ago
1.2.1
2 years ago
1.1.25
4 years ago
1.1.24
4 years ago
1.1.23
5 years ago
1.1.22
5 years ago
1.1.21
5 years ago
1.1.20
5 years ago
1.1.19
5 years ago
1.1.18
5 years ago
1.1.17
5 years ago
1.1.16
5 years ago
1.1.15
5 years ago
1.1.14
5 years ago
1.1.13
5 years ago
1.1.12
5 years ago
1.1.11
5 years ago
1.1.9
5 years ago
1.1.10
5 years ago
1.1.8
5 years ago
1.1.7
5 years ago
1.1.6
5 years ago
1.1.5
5 years ago
1.1.4
5 years ago
1.1.3
5 years ago
1.1.2
5 years ago
1.1.1
5 years ago
1.0.0
5 years ago