From 40eb2eb9adf7edc378c81d460f2d14342a8c74ca Mon Sep 17 00:00:00 2001 From: Lance Ball Date: Thu, 2 Mar 2017 16:51:10 -0500 Subject: [PATCH] fix: include the error when emitting the 'fallback event' --- lib/circuit.js | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/lib/circuit.js b/lib/circuit.js index 792bd131..26a1e7f7 100644 --- a/lib/circuit.js +++ b/lib/circuit.js @@ -178,7 +178,8 @@ class CircuitBreaker extends EventEmitter { * @event CircuitBreaker#reject */ this.emit('reject', new Error('Breaker is open')); - return fallback(this, args) || fail(this, 'Breaker is open', args); + return fallback(this, 'Breaker is open', args) || + fail(this, 'Breaker is open', args); } this[PENDING_CLOSE] = this.halfOpen; @@ -195,7 +196,7 @@ class CircuitBreaker extends EventEmitter { * @event CircuitBreaker#timeout */ this.emit('timeout', error); - resolve(fallback(this, args) || fail(this, error, args)); + resolve(fallback(this, error, args) || fail(this, error, args)); }, this.options.timeout); const result = this.action.apply(this.action, args); @@ -217,7 +218,7 @@ class CircuitBreaker extends EventEmitter { }) .catch((error) => { clearTimeout(timeout); - const fb = fallback(this, args); + const fb = fallback(this, error, args); if (fb) return resolve(fb); fail(this, error, args); reject(error); @@ -225,12 +226,12 @@ class CircuitBreaker extends EventEmitter { }); } catch (error) { clearTimeout(timeout); - return fallback(this, args) || fail(this, error, args); + return fallback(this, error, args) || fail(this, error, args); } } } -function fallback (circuit, args) { +function fallback (circuit, err, args) { if (circuit[FALLBACK_FUNCTION]) { return new circuit.Promise((resolve, reject) => { const result = circuit[FALLBACK_FUNCTION].apply(circuit[FALLBACK_FUNCTION], args); @@ -238,7 +239,7 @@ function fallback (circuit, args) { * Emitted when the circuit breaker executes a fallback function * @event CircuitBreaker#fallback */ - circuit.emit('fallback', result); + circuit.emit('fallback', result, err); resolve(result); }); }