process-controller
Version:
A process controller base on promise that can be used in both browser and node
10 lines (8 loc) • 3.25 kB
JavaScript
/**
* Bundle of process-controller
* Generated: 2020-04-14
* Version: 2.1.0
* License: MIT
* Author: 2631541504@qq.com
*/
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t=t||self).ProcessController={})}(this,function(u){"use strict";function n(t,e){for(var r=0;r<e.length;r++){var s=e[r];s.enumerable=s.enumerable||!1,s.configurable=!0,"value"in s&&(s.writable=!0),Object.defineProperty(t,s.key,s)}}function i(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function s(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);t&&(s=s.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,s)}return r}function o(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?s(Object(r),!0).forEach(function(t){i(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):s(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}var t;(t=u.ProcessStatus||(u.ProcessStatus={}))[t.Waiting=0]="Waiting",t[t.Running=1]="Running",t[t.Pausing=2]="Pausing";var e=function(){function e(t){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),i(this,"currSteps",[]),i(this,"history",[]),i(this,"status",u.ProcessStatus.Waiting),i(this,"currStepResult",Promise.resolve()),i(this,"currProcessResult",Promise.resolve()),i(this,"options",void 0),this.options=o({},t,{autoRun:t&&t.autoRun||function(){return!1}})}var t,r,s;return t=e,(r=[{key:"correctOrder",value:function(){this.currSteps.sort(function(t,e){return t.order-e.order})}},{key:"addStep",value:function(t,e,r){var s=this;function n(){return Math.random().toString(36)}var u=o({},r,{callback:t,order:e,id:(n()+n()).replace(/0\./,"").slice(0,15).toUpperCase()});return this.currSteps.push(u),this.correctOrder(),Promise.resolve(this.options.autoRun(u,this)).then(function(t){t&&s.run()}),u}},{key:"run",value:function(){var e,s=this;if(this.status===u.ProcessStatus.Running||this.currSteps.length<1)return this.currProcessResult;this.status!==u.ProcessStatus.Pausing&&(this.history.push([]),this.currProcessResult=new Promise(function(t){e=t}),this.currProcessResult.resolveFn=e);var n=this.history[this.history.length-1];return this.status=u.ProcessStatus.Running,function t(){return s.status===u.ProcessStatus.Pausing||s.currSteps.length<1?Promise.resolve():(r=s.currSteps[0],s.currStepResult=s.currStepResult.then(function(){return r.callback.apply(r,arguments)}),s.currStepResult.then(function(t){n.push(r);var e=s.currSteps[0];e&&r.id===e.id&&s.currSteps.shift(),s.currSteps.length<1&&s.currProcessResult.resolveFn(t)})).then(function(){return t()});var r}().then(function(){return s.status=u.ProcessStatus.Waiting,s.currProcessResult})}},{key:"pause",value:function(){this.status=u.ProcessStatus.Pausing}},{key:"stop",value:function(){this.currSteps=[],this.status=u.ProcessStatus.Waiting}}])&&n(t.prototype,r),s&&n(t,s),e}();u.default=e,Object.defineProperty(u,"__esModule",{value:!0})});