axios-series
Version:
A tool to extend axios to return sequentially
8 lines (7 loc) • 2.56 kB
JavaScript
/*!
* axios-series v1.2.0
* A tool to extend axios to return sequentially
* (c) 2021-2023 saqqdy
* Released under the MIT License.
*/
import{__awaiter as n,__generator as e,__values as r}from"tslib";import t from"axios";var i=function(){function i(n,e){this.waiting={},this.unique=!1,this.orderly=!0,this.onCancel=null;e=Object.assign({unique:!1,orderly:!0},e||{}),this.axiosInstance=n,this.unique=e.unique,this.orderly=e.orderly,e.onCancel&&(this.onCancel=e.onCancel)}return i.prototype.request=function(r){return n(this,void 0,void 0,(function(){var n,i,o,a,s,u,l,c,f,h,d=this;return e(this,(function(e){return n=r.unique,i=void 0===n?this.unique:n,o=r.orderly,a=void 0===o?this.orderly:o,s=r.url,u=void 0===s?"":s,l=Symbol("promiseKey"),c=t.CancelToken.source(),r.cancelToken=c.token,"function"==typeof AbortController&&(f=new AbortController,r.signal=f.signal),i&&this.clear(u),h=new Promise((function(n,e){d.axiosInstance(r).then((function(e){a?d.wait(u,l).then((function(){n(e)})):n(e)})).catch((function(n){t.isCancel(n)?d.onCancel&&d.onCancel(n,r):e(n)})).finally((function(){var n=d.waiting[u].findIndex((function(n){return n.promiseKey===l}));n>-1&&d.waiting[u].splice(n,1)}))})),this.add(u,{promiseKey:l,promise:h,source:c,abortController:f}),[2,h]}))}))},i.prototype.clear=function(n){var e,t;for(var i in this.waiting)if(!n||i===n){var o=this.waiting[i]||[];try{for(var a=(e=void 0,r(o)),s=a.next();!s.done;s=a.next()){var u=s.value;u.source.cancel("request canceled"),u.abortController&&u.abortController.abort()}}catch(n){e={error:n}}finally{try{s&&!s.done&&(t=a.return)&&t.call(a)}finally{if(e)throw e.error}}this.waiting[i]=[]}},i.prototype.wait=function(r,t){return n(this,void 0,void 0,(function(){var n,i;return e(this,(function(e){switch(e.label){case 0:if(!this.orderly)return[2,Promise.resolve()];n=this.waiting[r]||[],i=n.findIndex((function(n){return n.promiseKey===t})),e.label=1;case 1:if(!(i>0))return[3,7];if(i--,!n[i]||n[i].promiseKey===t)return[3,6];e.label=2;case 2:return e.trys.push([2,4,,5]),[4,n[i].promise];case 3:return e.sent(),[3,5];case 4:return e.sent(),console.info("The task has been dropped"),[3,5];case 5:n.splice(i,1),e.label=6;case 6:return[3,1];case 7:return[2]}}))}))},i.prototype.add=function(n,e){n in this.waiting||(this.waiting[n]=[]),this.waiting[n].push(e)},i}();function o(n,e){var r=new i(n,e);function t(n,e){var t;return"string"!=typeof n?e=n:(null!=e||(e={}),null!==(t=e.url)&&void 0!==t||(e.url=n)),r.request(e)}return t.series=r.waiting,t.clear=function(){r.clear()},t}export{o as default};