UNPKG

@studyportals/sp-hs-misc

Version:

Miscellaneous code used in HouseStark's projects

145 lines (124 loc) 6.3 kB
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; }();