O Objeto de promessa tem muitas funções úteis, como all
, resolve
, reject
, e race
— coisas que usamos o tempo todo. Uma função que muitos não conhecem é a Promise.allSettled
, uma função que é acionada quando todas as promessas em uma matriz são liquidadas, independentemente de qualquer uma das promessas ser resolvida ou rejeitada.
Promise.all
é ótimo, mas o then
não é chamado se um projeto for rejeitado:
Promise.all([ Promise.resolve(1), Promise.resolve(true), Promise.reject("Boooooo"), ]) .then(_ => console.log("Then!")) .catch(e => console.log("catch!")); // Catch!
Sempre haverá casos em que o senhor gostaria de executar o then
independentemente dos resultados individuais – pense em ocultar uma imagem de spinner no final de várias solicitações de busca; é aí que o Promise.allSettled
entra em cena:
Promise.allSettled([ Promise.resolve(1), Promise.resolve(true), Promise.reject("Boooooo"), ]) .then(promiseResults => console.log("Then! ", promiseResults)) .catch(e => console.log("catch!")); /* Then! [ { status: "fulfilled", value: 1 }, { status: "fulfilled", value: true }, { status: "rejected", reason: "Boooooo" } ] */
Promise.allSettled
é incrível – certamente muito melhor do que um calço velho que circulava por aí há alguns anos. Entre all
, allSettled
, e race
, bem como a capacidade de cancelar fetch
solicitaçõesSe o senhor quiser, temos quase todos os aspectos de Promises cobertos!