@yuebai008/cli
Version:
Command line interface for rapid qg-minigame development
1 lines • 1.02 kB
JavaScript
export class Throttler{#s;#e;#i;#o;#t;#h;#r;#n;constructor(s){this.#s=s,this.#e=!1,this.#i=!1,this.#o=null,this.#t=0,this.#h=new Promise((s=>{this.#r=s}))}processCompleted(){this.#t=this.getTime(),this.#e=!1,this.#o&&this.innerSchedule(!1),this.processCompletedForTests()}processCompletedForTests(){}get process(){return this.#o}onTimeout(){this.#n=void 0,this.#i=!1,this.#e=!0,Promise.resolve().then(this.#o).catch(console.error.bind(console)).then(this.processCompleted.bind(this)).then(this.#r),this.#h=new Promise((s=>{this.#r=s})),this.#o=null}schedule(s,e){this.#o=s;const i=Boolean(this.#n)||this.#e,o=this.getTime()-this.#t>this.#s,t=(e=Boolean(e)||!i&&o)&&!this.#i;return this.#i=this.#i||e,this.innerSchedule(t),this.#h}innerSchedule(s){if(this.#e)return;if(this.#n&&!s)return;this.#n&&this.clearTimeout(this.#n);const e=this.#i?0:this.#s;this.#n=this.setTimeout(this.onTimeout.bind(this),e)}clearTimeout(s){clearTimeout(s)}setTimeout(s,e){return window.setTimeout(s,e)}getTime(){return window.performance.now()}}