
Product
Socket for Jira Is Now Available
Socket for Jira lets teams turn alerts into Jira tickets with manual creation, automated ticketing rules, and two-way sync.
promise-retry
Advanced tools
Retries a function that returns a promise, leveraging the power of the retry module.
Retries a function that returns a promise, leveraging the power of the retry module to the promises world.
There's already some modules that are able to retry functions that return promises but they were rather difficult to use or do not offer an easy way to do conditional retries.
$ npm install promise-retry
Calls fn until the returned promise ends up fulfilled or rejected with an error different than
a retry error.
The options argument is an object which maps to the retry module options:
retries: The maximum amount of times to retry the operation. Default is 10.factor: The exponential factor to use. Default is 2.minTimeout: The number of milliseconds before starting the first retry. Default is 1000.maxTimeout: The maximum number of milliseconds between two retries. Default is Infinity.randomize: Randomizes the timeouts by multiplying with a factor between 1 to 2. Default is false.The fn function will receive a retry function as its first argument that should be called with an error whenever you want to retry fn. The retry function will always throw an error.
If there are retries left, it will throw a special retry error that will be handled internally to call fn again.
If there are no retries left, it will throw the actual error passed to it.
If you prefer, you can pass the options first using the alternative function signature promiseRetry([options], fn).
var promiseRetry = require('promise-retry');
// Simple example
promiseRetry(function (retry, number) {
console.log('attempt number', number);
return doSomething()
.catch(retry);
})
.then(function (value) {
// ..
}, function (err) {
// ..
});
// Conditional example
promiseRetry(function (retry, number) {
console.log('attempt number', number);
return doSomething()
.catch(function (err) {
if (err.code === 'ETIMEDOUT') {
retry(err);
}
throw err;
});
})
.then(function (value) {
// ..
}, function (err) {
// ..
});
$ npm test
Released under the MIT License.
The 'retry' package provides a general retry operation, which can be used to wrap both synchronous and asynchronous functions. Unlike 'promise-retry', it is not specifically tailored for promises but can be used with them. It offers a similar set of options to control the retry behavior.
Similar to 'promise-retry', 'async-retry' is designed to work with async/await syntax and promises. It provides a simple and flexible way to add retry functionality to asynchronous operations. It differs in its API design and may offer different customization options.
The 'p-retry' package is another alternative that focuses on retrying promises. It has a slightly different API and may offer different options or defaults. It is built to work seamlessly with async/await and provides a concise way to handle retries in promise-based workflows.
FAQs
Retries a function that returns a promise, leveraging the power of the retry module.
The npm package promise-retry receives a total of 22,204,771 weekly downloads. As such, promise-retry popularity was classified as popular.
We found that promise-retry demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Product
Socket for Jira lets teams turn alerts into Jira tickets with manual creation, automated ticketing rules, and two-way sync.

Company News
Socket won two 2026 Reppy Awards from RepVue, ranking in the top 5% of all sales orgs. AE Alexandra Lister shares what it's like to grow a sales career here.

Security News
NIST will stop enriching most CVEs under a new risk-based model, narrowing the NVD's scope as vulnerability submissions continue to surge.