deep-resource
Version:
DEEP Resource Library
80 lines (63 loc) • 2.38 kB
JavaScript
/**
* Created by CCristi on 11/14/16.
*/
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.RetryManager = undefined;
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _StrategyFactory = require('./RetryStrategy/StrategyFactory');
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
let RetryManager = exports.RetryManager = function () {
/**
* @param {String[]|Function[]} strategies
*/
function RetryManager(strategies) {
_classCallCheck(this, RetryManager);
this._strategies = strategies.map(_StrategyFactory.StrategyFactory.create);
this._count = 0;
}
/**
* @param {String|Function} strategy
* @param {Object[]} args
* @returns {RetryManager}
*/
_createClass(RetryManager, [{
key: 'addStrategy',
value: function addStrategy(strategy) {
for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
this._strategies.push(_StrategyFactory.StrategyFactory.create.apply(_StrategyFactory.StrategyFactory, [strategy].concat(args)));
return this;
}
/**
* @param {Response} response
* @returns {Boolean}
*/
}, {
key: 'isRetryable',
value: function isRetryable(response) {
return this._strategies.reduce((decideBool, strategy) => {
return decideBool || strategy.decide(response);
}, false) && --this._count > 0;
}
/**
* @param {Number} count
*/
}, {
key: 'count',
set: function set(count) {
this._count = count;
}
/**
* @returns {Number}
*/
,
get: function get() {
return this._count;
}
}]);
return RetryManager;
}();