choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
90 lines (73 loc) • 2.76 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = throttleAdapterEnhancer;
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _cache = _interopRequireDefault(require("../cache"));
var _utils = require("./utils");
function throttleAdapterEnhancer(adapter) {
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var _options$threshold = options.threshold,
threshold = _options$threshold === void 0 ? 1000 : _options$threshold,
_options$cache = options.cache,
cache = _options$cache === void 0 ? new _cache["default"]({
max: 10
}) : _options$cache;
var recordCacheWithRequest = function recordCacheWithRequest(index, config) {
var responsePromise = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
var response;
return _regenerator["default"].wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.prev = 0;
_context.next = 3;
return adapter(config);
case 3:
response = _context.sent;
cache.set(index, {
timestamp: Date.now(),
value: Promise.resolve(response)
});
return _context.abrupt("return", response);
case 8:
_context.prev = 8;
_context.t0 = _context["catch"](0);
cache.del(index);
throw _context.t0;
case 12:
case "end":
return _context.stop();
}
}
}, _callee, null, [[0, 8]]);
}))();
cache.set(index, {
timestamp: Date.now(),
value: responsePromise
});
return responsePromise;
};
return function (config) {
var index = (0, _utils.buildURLWithAxiosConfig)(config);
var now = Date.now();
var cachedRecord = cache.get(index) || {
timestamp: now
};
if (now - cachedRecord.timestamp <= threshold) {
var responsePromise = cachedRecord.value;
if (responsePromise) {
if (process.env.LOGGER_LEVEL === 'info') {
// eslint-disable-next-line no-console
console.info("request cached by throttle adapter: ".concat(index));
}
return responsePromise;
}
}
return recordCacheWithRequest(index, config);
};
}
//# sourceMappingURL=throttleAdapterEnhancer.js.map
;