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!