Retry/poll mechanism with backoff support and some handy defaults.
Nag is a small utility to handle automatic retries of an asynchronous operation.
- Wait a specified amount of time between each attempt.
- Retry a maximum number of times before giving up.
- Wait longer between each attempt (exponential backoff).
There are multiple similar modules out there, but this one strives to be less verbose to invoke for the most common use cases. Also, I really wanted to write one.
Module is a callable function.
var nag = require'nag';var net = require'net';netconnect6379; // will throw exception if not respondingnext;;child_processspawn'redis-server';nagcheckRedisUpconsole.log"redis operational";;
poll function must accept a standard
callback(err, data) function as its only
Will repeatedly call
poll until it gives a successful callback, in which it will
next(null, data) where
data is whatever data
poll yielded in its callback.
If a maximum number of attempts has been exceeded, it will call
is the error object of the last failed
poll throws an exception, it is treated the same as an error callback. E.g. if
poll throws the exception
ex, it is treated exactly as if
wait: <default: 1000 number of miliseconds to wait between each attempt>attempts: <default: infinite number of attempts before giving up>backoff: undefined <default - wait time is kept constant>|| multiplier: <default: 2 multiply wait time by this after each attempt>maximum: <default: 60000 wait time will not exceed this>|| <multiplier - shorthand for above format>|| <function taking current wait value and returning next wait value>canRetry: undefined <default - all errors are retryable>|| <function taking poll error and returning whether it makes sense to retry>
Some variants of
nag() with different default behavior have been provided for convenience.
Arguments and config format are same as for
nag.backoff- Waits 1 second after first attempt, 2 seconds after second, then 4 seconds, 8 seconds, and so on until a maximum of 60 seconds.
nag.minute- Retries every minute.
nag.rabid- Retries immediately after a failure (0 miliseconds between each attempt).
nag.burst- 10 miliseconds between each attempt. Gives up after 1000 failures.
nag.patient- Waits 1 minute after first failure, and adds 50% to the wait time after each failure. Max wait time is 1 hour.
MIT. See file
LICENSE for details.