Puedo ver un comportamiento extraño cuando fallan todas las solicitudes de múltiples promesas de JavaScript para resolver con Promise.allSettled, .catch no puede manejar el rechazo.
const API_URL = "https://jsonplaceholder.typicode.com/"; const spinner = document.getElementById("spinner"); const output = document.getElementById("output"); function queryApi(endpoint){ return fetch(API_URL + endpoint).then(response => { return response.ok ? response.json() : Promise.reject("Unsuccessful response"); }) } const promise = Promise.allSettled([ queryApi("_posts"), queryApi("_comments"), queryApi("_users") ]); promise .then(results => { console.log(results); const posts = results[0]; const comments = results[1]; const users = results[2]; const statistics = []; if(posts.status === 'fulfilled'){ statistics.push(`${posts.value.length} posts`); } if(comments.status === 'fulfilled'){ statistics.push(`${comments.value.length} comments`); } if(users.status === 'fulfilled'){ statistics.push(`${users.value.length} users`); } output.innerText = statistics.join("\n"); }) .catch(error => { console.warn(error); output.innerText = ":("; }) .finally(() => { spinner.remove(); });Promise.allSettled() siempre se resuelve, incluso si se le pasan algunas promesas que se rechazan. Se resuelve con una serie de resultados para cada promesa.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/allSettled
Puede usar Promise.all() en su lugar, que se resolverá cuando se resuelvan todas las promesas pasadas o se rechace cuando se rechace cualquier promesa pasada.
La instrucción catch se ejecutará cuando ocurra el error. Como Promise.allSettled() siempre se resuelve, puede generar manualmente un error, es decir
if(posts.status === "rejected"){ throw new Error('a status was rejected'); }