axios-series
Version:
A tool to extend axios to return sequentially
8 lines (7 loc) • 4.24 kB
JavaScript
/*!
* axios-series v1.2.0
* A tool to extend axios to return sequentially
* (c) 2021-2023 saqqdy
* Released under the MIT License.
*/
this.axiosSeries=function(n){"use strict";function e(n,e,t,r){return new(t||(t=Promise))((function(i,o){function a(n){try{l(r.next(n))}catch(n){o(n)}}function u(n){try{l(r.throw(n))}catch(n){o(n)}}function l(n){var e;n.done?i(n.value):(e=n.value,e instanceof t?e:new t((function(n){n(e)}))).then(a,u)}l((r=r.apply(n,e||[])).next())}))}function t(n,e){var t,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function u(u){return function(l){return function(u){if(t)throw new TypeError("Generator is already executing.");for(;o&&(o=0,u[0]&&(a=0)),a;)try{if(t=1,r&&(i=2&u[0]?r.return:u[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,u[1])).done)return i;switch(r=0,i&&(u=[2&u[0],i.value]),u[0]){case 0:case 1:i=u;break;case 4:return a.label++,{value:u[1],done:!1};case 5:a.label++,r=u[1],u=[0];continue;case 7:u=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==u[0]&&2!==u[0])){a=0;continue}if(3===u[0]&&(!i||u[1]>i[0]&&u[1]<i[3])){a.label=u[1];break}if(6===u[0]&&a.label<i[1]){a.label=i[1],i=u;break}if(i&&a.label<i[2]){a.label=i[2],a.ops.push(u);break}i[2]&&a.ops.pop(),a.trys.pop();continue}u=e.call(n,a)}catch(n){u=[6,n],r=0}finally{t=i=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}([u,l])}}}function r(n){var e="function"==typeof Symbol&&Symbol.iterator,t=e&&n[e],r=0;if(t)return t.call(n);if(n&&"number"==typeof n.length)return{next:function(){return n&&r>=n.length&&(n=void 0),{value:n&&n[r++],done:!n}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}"function"==typeof SuppressedError&&SuppressedError;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 e(this,void 0,void 0,(function(){var e,i,o,a,u,l,c,s,f,h,p=this;return t(this,(function(t){return e=r.unique,i=void 0===e?this.unique:e,o=r.orderly,a=void 0===o?this.orderly:o,u=r.url,l=void 0===u?"":u,c=Symbol("promiseKey"),s=n.CancelToken.source(),r.cancelToken=s.token,"function"==typeof AbortController&&(f=new AbortController,r.signal=f.signal),i&&this.clear(l),h=new Promise((function(e,t){p.axiosInstance(r).then((function(n){a?p.wait(l,c).then((function(){e(n)})):e(n)})).catch((function(e){n.isCancel(e)?p.onCancel&&p.onCancel(e,r):t(e)})).finally((function(){var n=p.waiting[l].findIndex((function(n){return n.promiseKey===c}));n>-1&&p.waiting[l].splice(n,1)}))})),this.add(l,{promiseKey:c,promise:h,source:s,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)),u=a.next();!u.done;u=a.next()){var l=u.value;l.source.cancel("request canceled"),l.abortController&&l.abortController.abort()}}catch(n){e={error:n}}finally{try{u&&!u.done&&(t=a.return)&&t.call(a)}finally{if(e)throw e.error}}this.waiting[i]=[]}},i.prototype.wait=function(n,r){return e(this,void 0,void 0,(function(){var e,i;return t(this,(function(t){switch(t.label){case 0:if(!this.orderly)return[2,Promise.resolve()];e=this.waiting[n]||[],i=e.findIndex((function(n){return n.promiseKey===r})),t.label=1;case 1:if(!(i>0))return[3,7];if(i--,!e[i]||e[i].promiseKey===r)return[3,6];t.label=2;case 2:return t.trys.push([2,4,,5]),[4,e[i].promise];case 3:return t.sent(),[3,5];case 4:return t.sent(),console.info("The task has been dropped"),[3,5];case 5:e.splice(i,1),t.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}();return function(n,e){var t=new i(n,e);function r(n,e){var r;return"string"!=typeof n?e=n:(null!=e||(e={}),null!==(r=e.url)&&void 0!==r||(e.url=n)),t.request(e)}return r.series=t.waiting,r.clear=function(){t.clear()},r}}(axios);