u-promised
v0.2.5
Published
Promise based retry and backoff, bring your own Promises
Downloads
11
Maintainers
Readme
u-promised
Promise based retry and backoff, bring your own Promises
npm install u-promised
API
retry(retries, fn)
- retries:
- number (0 - ...)
- -1 (retry forever)
- function (evaluated after each attempt; should return boolean)
- fn: function that returns a promise
import { get } from 'highwire'
import { retry } from 'u-promised'
const fetchGoogle = () => get('http://google.com')
retry(3, fetchGoogle)
.then((google) => console.log(google))
.catch((err) => console.log('Oops, 4 attempts total', err))
// retry forever - no catch
retry(-1, fetchGoogle)
.then((google) => console.log(google))
// evalute retries
const evalRetry = () => {
let index = 0
return () => {
if (index === 5) return false
index++
return true
}
}
retry(evalRetry(), fetchGoogle)
.then((google) => console.log(google))
.catch((err) => console.log('Oops, 6 attempts total', err))
backoff(delay, incrementor, retries, fn)
- delay: initial delay after first failure
- incrementor: increment to add to delay after each attempt
- retries:
- number (0 - ...)
- -1 (retry forever)
- function (evaluated after each attempt; should return boolean)
- fn: function that returns a promise
import { get } from 'highwire'
import { backoff } from 'u-promised'
const fetchGoogle = () => get('http://google.com')
const SECOND = 1000
backoff(SECOND, SECOND, 3, fetchGoogle)
.then((google) => console.log(google))
.catch((err) => console.log('Oops, 4 attempts total', err))
// backoff forever
backoff(SECOND, SECOND, -1, fetchGoogle)
.then((google) => console.log(google))
// evaluate backoff
const evalBackoff = () => {
let index = 0
return () => {
if (index === 5) return false
index++
return true
}
}
backoff(SECOND, SECOND, evalBackoff(), fetchGoogle)
.then((google) => console.log(google))
.catch((err) => console.log('Oops, 6 attempts total', err))
Developing
There's really not much to this codebase. Just run npm test
. If you would like to contribute, please open an issue explaining what you would like to change/fix/add and make a pull request.