1.0.6 • Published 5 years ago

@pdedg/promise-retry v1.0.6

Weekly downloads
148
License
ISC
Repository
github
Last release
5 years ago

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

// Simple execution

import { promiseRetry } from '@pdedg/promise-retry';

const run = () => new Promise((resolve, reject) => reject());
promiseRetry(run); // will execute rejected promise by default 3 times and after will trow error
// With custom delay strategy

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);
/*
    Will result of: 5 executions of failed promise ( retryOn is set to all ways true ).
    On each attempt it will execute the onFailedAttempt, and will use linear delay between executions ( last will be 5s delay )
 */

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

// Simple execution

import { fetchRetry } from '@pdedg/promise-retry';

const fetch = () => new Promise((resolve, reject) => reject());
fetchRetry(fetch, '/end-point', { delay: 100 }); // Will execute 3 fetch calls with 100 / 200 / 400 delay and eventually an error will be thrown.
// With custom options

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)
/*
    Will result of: 2 executions of resolved promises, that will be rejected by the validate resolved method.
    eventually, it will throw an error.
 */
1.0.6

5 years ago

1.0.5

5 years ago

1.0.4

5 years ago

1.0.3

5 years ago

1.0.2

5 years ago

1.0.1

5 years ago

1.0.0

5 years ago