povtor
Version:
Repeat function call depending on the previous call result and specified conditions.
3 lines (2 loc) • 1.52 kB
JavaScript
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(e.povtor={})}(this,function(e){"use strict";e.retry=function(e){var t,r,n,i,o,u=new Promise(function(e,t){n=e,r=t}),a=e.retryTimeout,f=0,s=!1,p=e.retryAttempts,c=e.timeLimit;if(p&&p.length)o=p.length+1;else{p=null;var l=e.retryQty;o="number"==typeof l&&l>=0?l+1:-1}("number"!=typeof c||c<0)&&(c=0);var m=(new Date).getTime(),y={attempt:f,error:t,isError:!1,promise:u,result:[],settings:e,startTime:m,stop:function(){return s||(i&&(clearTimeout(i),y.wait=!1),s=y.stopped=!0,y.valueWait||n(y.value)),u},stopped:!1,value:t,valueWait:!1,wait:!1};function v(){y.attempt=++f,y.wait=!1,y.valueWait=!0;try{(t=e.action.apply(e.actionContext||null,e.actionParams||[]))&&"object"==typeof t&&"function"==typeof t.then?t.then(T,g):T(t)}catch(e){g(e)}}function d(){y.isError?r(y.error):n(y.value)}function h(){var t;if(f){if("function"==typeof(t=p?p.shift():a)&&!1===(t=t(y)))return d()}else t=e.delay;o>0&&o--,"number"!=typeof t||t<0?v():(y.wait=!0,i=setTimeout(v,t))}function w(e){var t,r=e,n={time:(new Date).getTime()};t=y.isError?n.error=y.error:n.value=y.value,y.result.push(n),y.valueWait=!1,s||!o?r=!1:"function"==typeof r&&(r=r(t,y)),r&&(!c||(new Date).getTime()-m<=c)?h():d()}function T(t){y.value=t,y.isError=!1,w(e.retryTest)}function g(t){y.error=t,y.isError=!0,w(e.retryOnError)}return h(),y},e.getPromiseField=function(e){return e.promise}});
//# sourceMappingURL=povtor.umd.js.map