promise-retry
A promise retry executor with exponential backoff strategy. Comes with fetch retry out of the box
Table of Contents
Installation
Install the package:
npm i @pdedg/promise-retry
API
promiseRetry(fn, [options])
A promise retry executor
- @param {Function} run Function that returns a promise
- @param {Object} Options Execution options
- @param {Function} validateResolved Sample promise resolved result and determines if OK
- @param {Function} retryOn Determines when to retry on error
- @param {Number} retries Amount of retries to execute
- @param {Number|Function} delay The delay between execution ( Can be a function for delay strategies)
- @param {Function} onFailedAttempt Error callback, will be called on each retriable error.
- @param {Function} onBreach - Error callback, will be called on 2 cases: 1) When attempts are equal to retries. 2) On Non retriable error
Examples
import { promiseRetry } from '@pdedg/promise-retry';
const run = () => new Promise((resolve, reject) => reject());
promiseRetry(run);
import { promiseRetry } from '@pdedg/promise-retry';
const options = {
retries: 5,
retryOn: (err) => true,
delay: (err) => err.attempt * 1000,
onFailedAttempt: (err) => console.log(err.status)
}
const run = () => new Promise((resolve, reject) => reject());
promiseRetry(run);
fetchRetry(fetch, url, [options])
Wraps a fetch request with retry, by default it will retry on the following http status
[408, 503, 504] and on request-timeout error.
- @param {Function} fetch - Can be any fetch implementation ( node-fetch / browser fetch )
- @param {String} url - Request url
- @param {Object} options - fetch retry options
- @param {Number} retries Amount of retries, default to 3
- @param {Number / Function} delay The delay between executions, can be a number for the default backoff strategy OR a custom function
- @param {Function} retryOnResolved When should retry on resolved fetch result
- @param {Function} retryOnError When should retry on error occurred
- @param {Function} onFailedAttempt Error callback, will be called on each retriable error.
- @param {Function} onBreach Error callback, will be called on 2 cases: 1) When attempts are equal to retries. 2) On Non retriable error.
- @param {Object} fetchOptions Normal fetch options you would pass
Examples
import { fetchRetry } from '@pdedg/promise-retry';
const fetch = () => new Promise((resolve, reject) => reject());
fetchRetry(fetch, '/end-point', { delay: 100 });
import { fetchRetry } from '@pdedg/promise-retry';
const options = {
retries: 2,
retryOnResolved: (res) => {
if (res.status === 300) {
throw new Error('Cannot handle 300 status.')
}
},
}
const fetch = () => new Promise((resolve, reject) => resolve({ status: 300 }));
fetchRetry(fetch, '/end-point', options)