@studyportals/sp-hs-misc
Version:
Miscellaneous code used in HouseStark's projects
145 lines (124 loc) • 6.3 kB
JavaScript
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; }; }();
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) {
function adopt(value) {
return value instanceof P ? value : new P(function (resolve) {
resolve(value);
});
}
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) {
try {
step(generator.next(value));
} catch (e) {
reject(e);
}
}
function rejected(value) {
try {
step(generator["throw"](value));
} catch (e) {
reject(e);
}
}
function step(result) {
result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
}
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
//# sourceMappingURL=resilient-service-layer-requests-sender-decorator.class.js.map
var ResilientServiceLayerRequestsSenderDecorator = function () {
function ResilientServiceLayerRequestsSenderDecorator(serviceLayerRequestsSender, maximumRetries) {
_classCallCheck(this, ResilientServiceLayerRequestsSenderDecorator);
this.serviceLayerRequestsSender = serviceLayerRequestsSender;
this.maximumRetries = maximumRetries;
this.delayTime = 500;
}
_createClass(ResilientServiceLayerRequestsSenderDecorator, [{
key: "send",
value: function send(request) {
return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
return regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.next = 2;
return this.execute(request);
case 2:
return _context.abrupt("return", _context.sent);
case 3:
case "end":
return _context.stop();
}
}
}, _callee, this);
}));
}
}, {
key: "execute",
value: function execute(request) {
var executionCount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {
var executableRequest;
return regeneratorRuntime.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
executableRequest = Object.create(request);
executionCount++;
_context2.prev = 2;
_context2.next = 5;
return this.serviceLayerRequestsSender.send(executableRequest);
case 5:
return _context2.abrupt("return", _context2.sent);
case 8:
_context2.prev = 8;
_context2.t0 = _context2["catch"](2);
console.log("Request Execution failed " + executionCount + "x due to " + _context2.t0);
if (!(executionCount >= this.maximumRetries)) {
_context2.next = 13;
break;
}
throw _context2.t0;
case 13:
_context2.next = 15;
return this.delay(this.delayTime);
case 15:
_context2.next = 17;
return this.execute(request, executionCount);
case 17:
return _context2.abrupt("return", _context2.sent);
case 18:
case "end":
return _context2.stop();
}
}
}, _callee2, this, [[2, 8]]);
}));
}
}, {
key: "delay",
value: function delay(ms) {
return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee3() {
return regeneratorRuntime.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
_context3.next = 2;
return new Promise(function (resolve) {
setTimeout(resolve, ms);
});
case 2:
return _context3.abrupt("return", _context3.sent);
case 3:
case "end":
return _context3.stop();
}
}
}, _callee3, this);
}));
}
}]);
return ResilientServiceLayerRequestsSenderDecorator;
}();