/** * `ReadyUtil`: Registra processos que serão invocados após a conclusão de operações. */ export default class ReadyUtil{ private resolve:any; private promise:any; /** * Limpa o estado da instancia ao finalizar a execução do processo registrado. */ private clean() { this.resolve = undefined; this.promise = undefined; } /** * Inicializa o estado da instancia ao registrar processo. */ private start() { if(!this.promise) this.promise = new Promise((accept) => { this.resolve = () => accept(true); }) } /** * Executa processo atribuído. */ end(){ this.resolve && this.resolve(); } /** * Atribui processo que será executado por operações que o invocarem no método 'end'. * @returns Promise que deve conter o código do processo. */ whenReady(){ this.start(); return new Promise((accept) => { this.promise.then(() => { accept(true); this.clean(); }); }); } }