Retry a promise-returning or async function
Switch branches/tags
Nothing to show
Clone or download
Failed to load latest commit information.
.editorconfig Require Node.js 6 Apr 26, 2018
.gitattributes init Oct 21, 2016
.gitignore Require Node.js 6 Apr 26, 2018
.npmrc Require Node.js 6 Apr 26, 2018
.travis.yml Require Node.js 6 Apr 26, 2018
index.js Require Node.js 6 Apr 26, 2018
license Require Node.js 6 Apr 26, 2018
package.json 2.0.0 Apr 26, 2018 Fix tiny syntax error in the readme (#7) May 21, 2018
test.js Add `onFailedAttempt` option (#5) Apr 26, 2018

p-retry Build Status

Retry a promise-returning or async function

It does exponential backoff and supports custom retry strategies for failed operations.


$ npm install p-retry


const pRetry = require('p-retry');
const fetch = require('node-fetch');

const run = () => fetch('')
	.then(response => {
		// Abort retrying if the resource doesn't exist
		if (response.status === 404) {
			throw new pRetry.AbortError(response.statusText);

		return response.blob();

pRetry(run, {retries: 5}).then(result => {});

With the onFailedAttempt option:

const run = () => fetch('')
	.then(response => {
		if (response.status !== 200) {
			throw new Error(response.statusText);

		return response.json();

pRetry(run, {
	onFailedAttempt: error => {
		console.log(`Attempt ${error.attemptNumber} failed. There are ${error.attemptsLeft} attempts left.`);
		// 1st request => Attempt 1 failed. There are 4 retries left.
		// 2nd request => Attempt 2 failed. There are 3 retries left.
		// ...
	retries: 5
}).then(result => {});


pRetry(input, [options])

Returns a Promise that is fulfilled when calling input returns a fulfilled promise. If calling input returns a rejected promise, input is called again until the max retries are reached, it then rejects with the last rejection reason.

It doesn't retry on TypeError as that's a user error.


Type: Function

Receives the number of attempts as the first argument and is expected to return a Promise or any value.


Type: Object

Options are passed to the retry module.


Type: Function

Callback invoked on each retry. Receives the error thrown by input as the first argument with properties attemptNumber and attemptsLeft which indicate the current attempt number and the number of attempts left, respectively.


Abort retrying and reject the promise.


Type: string

Error message.


Type: Error

Custom error.



MIT © Sindre Sorhus