promise-fn-retry
Version:
A simple retry to be used in integrations with NodeJS
124 lines (88 loc) • 3.5 kB
Markdown
# Promise Retry
[](https://github.com/felippemauricio/promise-fn-retry/blob/master/LICENSE.md)
[](https://www.npmjs.com/package/promise-fn-retry)
[](https://travis-ci.org/felippemauricio/promise-fn-retry)
[](https://david-dm.org/felippemauricio/promise-fn-retry?type=dev)
[](https://coveralls.io/github/felippemauricio/promise-fn-retry?branch=master)
[](https://github.com/airbnb/javascript)
[](https://github.com/felippemauricio/promise-fn-retry/pulls)
Abstraction for exponential and custom retry strategies to failed promises.
Retrying made simple and easy. \o/
## Installation
Using yarn:
```js
yarn add promise-fn-retry
```
Using npm:
```js
npm i --save promise-fn-retry
```
## Usage
Simple Request
```js
import fetch from 'node-fetch';
import retry from 'promise-fn-retry';
const requestUser = () => {
// Create a function that return a promise
const promiseFn = () => fetch('https://api.github.com/users/14');
// call retry passing promiseFn argument. Thats it!
return retry(promiseFn)
.then(res => res.json());
};
export default requestUser;
```
Using options param
```js
import fetch from 'node-fetch';
import retry from 'promise-fn-retry';
const requestUser = () => {
// Create a function that return a promise
const promiseFn = () => fetch('https://api.github.com/users/14');
// You can use options to your retry rules strategy.
const options = {
times: 3,
initialDelay: 100,
};
// call retry passing promiseFn argument. Thats it!
return retry(promiseFn, options)
.then(res => res.json());
};
export default requestUser;
```
## API
```js
retry(promiseFn : Function, [options : Object]) => Promise
```
### Options
These are the available config options for retrying. Only promiseFn is required. If an object isn't provided, the lib will use the default options.
```javascript
{
// The number of times the lib will retry execute the promiseFn
// Default: 1
times: 3,
// The first wait time to delay
// Default: 100
initialDelayTime: 200,
// (Optional) This callback is executed on each retry. It's useful to log your errors to a log service for example
// Default: null
onRetry: (error) => {
console.log(error);
sendToSentry(error);
sendToKibana(error);
},
// (Optional) This callback is executed before each retry to determine if it's necessary retrying.
// If the function returns true, the next retry will be executed, else the retrying will be canceled.
// Default: null
shouldRetry: (error) => {
console.log(error);
return (error.message === 'FAILED_AUTH');
}
}
```
### Delay strategy
Each retry doubles the current delay.
- The first delay uses the `initialDelayTime` option, like `100ms`.
- The second uses `200ms` (100 * 2).
- The third uses `400ms` ...
## License
Licensed under the MIT License, Copyright © 2018-present Felippe Maurício.