/** * O intuito desta classe é organizar a finalização de várias * promessas executando determinada ação (callback) com o resultado. */ export default class PromiseSync{ _promises: Array>; _callBack: PromiseSyncCallback; /** * @param {PromiseSyncCallback} callback - Será chamado sempre que todas as promises se resolverem. */ constructor(callBack: PromiseSyncCallback) { this._promises = []; this._callBack = callBack; } /** * Adiciona na lista de promises pendentes. Isso faz com que criemos uma nova espera. * * @param {Promise} promise - Entrará na lista aguardada. */ public add(promise: Promise): void { this._promises.push(promise); Promise.allSettled(this._promises) .then(result => { if (result.length === this._promises.length) { this._promises = []; if (this._callBack) { this._callBack.resolve(result); } } } ); } } /** * Representa o callback de um sincronizador `PromiseSync`. */ export interface PromiseSyncCallback { /** * Será chamado sempre que todas as promessas adicionadas finalizarem. * * @param result - A lista com o resultado de todas as promises aguardadas. */ resolve(result: PromiseSettledResult> []): void; }