request-limit-pool
Version:
library for limit the maximum number of requests
1 lines • 2.48 kB
JavaScript
;function _typeof(e){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}Object.defineProperty(exports,"__esModule",{value:!0}),exports.isNumber=exports.isMinusOrZero=exports.default=void 0;var _constant=_interopRequireWildcard(require("./constant")),_eventCenterJs=_interopRequireDefault(require("event-center-js"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function _getRequireWildcardCache(e){var t,r;return"function"!=typeof WeakMap?null:(t=new WeakMap,r=new WeakMap,(_getRequireWildcardCache=function(e){return e?r:t})(e))}function _interopRequireWildcard(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!==_typeof(e)&&"function"!=typeof e)return{default:e};t=_getRequireWildcardCache(t);if(t&&t.has(e))return t.get(e);var r,n,o={},u=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&((n=u?Object.getOwnPropertyDescriptor(e,r):null)&&(n.get||n.set)?Object.defineProperty(o,r,n):o[r]=e[r]);return o.default=e,t&&t.set(e,o),o}var eventCenter=new _eventCenterJs.default,isNumber=function(e){return"[object Number]"===Object.prototype.toString.call(e)&&e+0-e==0},isMinusOrZero=(exports.isNumber=isNumber,function(e){return e<1});function RequestPool(){var r=this,e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:3;if(!isNumber(e))throw new Error(_constant.default.nanError);if(isMinusOrZero(e))throw new Error(_constant.default.naMinusOrZero);this.maxRequestNum=e,this.currentRequestNum=0,this.requestQueue=[],this.onFinish=function(e){return eventCenter.on(_constant.finishedEventName,e)},this.offFinish=function(){eventCenter.off(_constant.finishedEventName)},this.done=function(e){if("[object Function]"!==Object.prototype.toString.call(e))throw new Error(_constant.default.doneCbError);return r.onFinish(e)},this.push=function(e){if(r.currentRequestNum<r.maxRequestNum){var t=e();if(!t instanceof Promise)throw new Error(_constant.default.insError);r.currentRequestNum++,t.finally(function(){var e;r.currentRequestNum--,0!==r.requestQueue.length&&(e=r.requestQueue.pop(),r.push(e)),0===r.currentRequestNum&&eventCenter.fire(_constant.finishedEventName)})}else r.requestQueue.unshift(e)}}exports.isMinusOrZero=isMinusOrZero;var _default=RequestPool;exports.default=_default;