Promised Retry
A generic promised based retry mechanism. Useful for eg. ensuring an available database or message queue connection
Installation
npm install promised-retry
Usage
Simple:
const Retry = require('promised-retry')
const { Client } = require('pg')
const retryInstance = new Retry({
try: async () => {
const db = new Client(require('../config').db);
db.on('error', () => {
retryInstance.reset();
if (channels.length) {
retryInstance.try();
}
});
await db.connect();
},
success: db => {
db.on('notification', self.processNotification.bind(self));
channels.forEach(channel => {
db.query('LISTEN ' + channel);
});
},
end: db => { db.end(); }
});
Syntax
const retryInstance = new Retry(options);
Options
-
try - the function that will make up the attempt. Should return a Promise that's fulfilled or rejected depending on whether the attempt is a success or failure.
-
success - a function that's run on an successful attempt. Will be sent the result of the attempt and can return a modified result or a Promise.
-
end - a function that will be run on the closing of the retry script. Useful for when needing to fix a graceful shutdown of eg. a database. Can return a Promise if it needs to do something that the shutdown needs to wait for.
-
name – the name of the Retry attempt. Used in eg debugging.
-
setup – a function that will be run before the first attempt
-
name – the name of the Retry attempt. Used in eg debugging.
-
retryMin – minimum delay in milliseconds before a retry. Defaults to
0
.
-
retryBase – the base of the delay exponent. Defaults to
1.2
.
-
retryExponent – the maximum exponent of the delay exponent. If retries are higher than
retryExponent
, retryExponent
will be used rather than the retry number. Defaults to 33
which means on average max delay of 3m 25s.
-
retryDelay – a function used to calculate the delay. Replaces the default exponent calculation. If it returns
false
the retries will be aborted.
-
retryLimit – maximum amount of retries. Defaults to unlimited retries.
-
log – a logger function. Defaults to
console.log()
.
Methods
-
try – returns a Promise that will be resolved with the successful attempt or rejected if the retries were aborted due to the result of
options.retryDelay()
or because the retry instance was ended.
-
end – ends the Retry mechanism completely. Useful for ensuring a graceful shutdown. Returns a Promise that will be resolved when done.
-
reset – resets the Retry mechanism. Used in response to an event that eg. indicated that the connection the Retry mechanism managed to established has errored out. Will not result in a retry automatically. That has to be done manually if one wants one right away.
Lint / Test
npm test
or to watch, install grunt-cli
then do grunt watch