Stack Overflow en español Asked on December 5, 2021
Estoy aprendiendo de asincronismo y estoy intentando llamar multiples promesas en paralelo, la cosa es que de la API donde estoy sacando los datos al parecer el elemento no. 17 no hay nada o al menos me manda un error, eso lo comprobe directamente en la pagina oficial de la API.
Por ende como no hay nada, siempre que llame mi arreglo de promesas, me saldrá un error.
function getPersonaje(id) {
return new Promise((resolve, reject) => {
const personaje = `${API_URL}${PEOPLE_URL.replace(':id', id)}`;
// $.get permite hacer un request.
$.get(personaje, opts, function(data) {
resolve(data)
})
.fail(() => reject(id));
});
}
function onError(id) {
console.log(`Sucedio un error al obtener el personaje ${id}`)
}
var ids = [];
for (var i = 0; i < 100; i++) {
ids[i] = i + 1;
}
console.log(ids);
var promesas = ids.map(id => getPersonaje(id))
Promise
.all(promesas)
.then(personajes => console.log(personajes))
.catch(onError)
¿En esos casos que se hace? Este ejemplo es algo sencillo puedo poner un if y no añadir el numero 17 al arreglo, pero si estuviera trallendo mucho más datos, no sería optimo estar revisando donde esta el error, es decir hay alguna forma de omitir ese error y llamar los datos que si estan disponibles o que si se pudieron llamar? Imagino que debe haber algo asi.
Promise.all
es devuelta como fallida cuando encuentra el primer reject()
.
Pero si no te importa la dependencia una de otra, y solo quieres todos los resultados, fallen o no...
Promise.allSettled()
Eso resolvería tu problema... Un ejemplo:
const promise1 = Promise.resolve(3);
const promise2 = new Promise((resolve, reject) => setTimeout(reject, 100, 'foo'));
Promise.allSettled([promise1, promise2])
.then((results) => results.forEach((result) => console.log(result)));
// expected output:
// { status: "fulfilled", value: 3 }
// { status: "rejected", reason: "foo" }
Answered by Diego Andrés on December 5, 2021
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP