From 342df8b222c189975f2a0b29543333efe9780216 Mon Sep 17 00:00:00 2001 From: Oliver Salzburg Date: Thu, 20 Aug 2015 19:33:53 +0200 Subject: [PATCH] feat(main): allow retries to be limited --- README.md | 1 + index.js | 9 ++++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 3ecd43d..1ea3fab 100644 --- a/README.md +++ b/README.md @@ -65,6 +65,7 @@ var retryInstance = new Retry({ * **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 `-1`, which means unlimited retries. * **log** – a logger function. Defaults to `console.log()`. ## Methods diff --git a/index.js b/index.js index 37e47b0..34551eb 100644 --- a/index.js +++ b/index.js @@ -37,6 +37,7 @@ var Retry = function (options) { this.options = resolvedOptions; this.log = resolvedOptions.log; this.failures = 0; + this.retryLimit = -1; }; Retry.prototype._try = function () { @@ -76,7 +77,13 @@ Retry.prototype._try = function () { self.retrying = undefined; self.abort = undefined; - return self._try(); + + if (self.retryLimit > -1 && self.failures >= self.retryLimit) { + self.end(); + return Promise.reject(new Error('Retry limit reached')); + } else { + return self._try(); + } }); };