promise-repeat

A simple dependency-free promise library that retries a given function until it succeeds or certain fail criteria are met. Can also be used to timeout Promises.

Usage no npm install needed!

<script type="module">
  import promiseRepeat from 'https://cdn.skypack.dev/promise-repeat';
</script>

README

Promise Repeat

A simple utility that retries a given function until it either succeeds or certain failure criteria are met. It's also useful in case you want to just timeout a Promise.

I wrote this because I couldn't find a small library without dependencies for the purpose of including in a browser environment.

Installation

$ npm install promise-repeat

Usage

somePromiseFunction()
  .then(something )
  .then(promiseRepeat(fn, options))
  .then(...)
  .catch(...)

promiseRepeat(fn, options)() // note the trailing () which kicks-off the chain
  .then(...)
  .catch(...)

Options

Option Default Description
maxAttempts 3 Maximum number of attempts to make before failing
maxTimeout 3,000 (3 sec) Maximum amount of time before the promsie gets rejected
throttle 0 How long to wait between calls to the function
throttleFn returns throttle function( retryCount, throttle ) - Custom throttle function to allow for timing adjustments
boolRetryFn returns true function( err, { retryCount: # }) - Function that should return true or false based on err as to whether or not the function should keep trying. Note that this does not override the maxRetries or maxTimeout options. Set those both to Infinity if you want to rely solely on this option.
resolveAfterReject If the function returns a value after the promise has been rejected due to a timeout, this is called so that you can actually catch the result (in case you need to roll it back, notify user, etc). Potentially called once for each attempt at running the promise

If a promise is rejected it is rejected with the last error, with err.previousErrors = Error[] added to object