Emmanuel Maximino Lopez Licea
PreguntaEstoy haciendo un bucle para poner 100 personajes en un arreglo pero al parecer el personaje no 17 no existe y a partir del no 100 ya no hay mas personajes, por ende me da un error, el segundo problema es obvio de resolver, pero en el primer caso ¿que se hace? ¿quitar el personaje manualmente? ¿y si es una lista mucho mayor? ¿que tal si estas obteniendo los objetos de una base de datos y por alguna razón 1 solo te da un error? se deberían poder mostrar los demás, ¿que se hace en tal caso?
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)``` No supe como poner imagenes pero en pocas palabras cuando busco el personaje 17 directamente en la API es decir en su pagina web me sale 404 error y en la consola simplement me sale el mensaje que configuramos y bastantes errores 404 despues.
Leonardo Aedo Jimenez
Estuve revisando sobre el tema y encontre que existe una función llamada .allSettled(), esta agrupa las respuesta de todas las promesas sean buenas o malas. y funciona así:
function onPeopleResponse({ value, reason }) { if (value) { console.log(`Hola yo soy, ${value.name}`) } else { console.error(`El personaje ${reason} no existe`) } } Promise .allSettled(promesas) .then(personajes => { console.log(personajes) personajes.forEach(onPeopleResponse); console.log('------------------------ SOLO FILTRADOS ------------------------') var personajesEncontrados = personajes.filter(personaje => personaje.status == "fulfilled") var personajesEncontrados2 = personajes.filter(personaje => personaje.value) console.log(personajesEncontrados) console.log(personajesEncontrados2) console.log('------------------------ SOLO VALUE ------------------------') var personajesEncontradosMasPro = personajes.filter(personaje => personaje.status == "fulfilled").map(personaje => personaje.value) var personajesEncontradosMasPro2 = personajes.filter(personaje => personaje.value).map(personaje => personaje.value) console.log(personajesEncontradosMasPro) console.log(personajesEncontradosMasPro2) }) .catch(onPeopleError)
En este caso al allSettled se le envian tambien todas lsa promesas y tambien se leen los datos en el then. pero el array devuelta tiene unas propiedades extras, primero devuelve una propiedad status que puede ser fulfilled (Que se ejecuto bien) o rejected (rechazado o error), ademas devuelve una propiedad value cuando es fulfilled que es el valor que responde la promesa (en este caso lo que devolvemos como
resolve(data)
reject(id
mas información aquí en la documentación de mozilla
Leonardo Moreno Faberón
ok como hacer para que se muestre todos los persajes que si pudo conseguir y aquel donde dio error por que " { "detail": "Not found" } " especificamente el personaje 17 no esta en la api asi q obvio las propiedades esperadas del json estan vacias. como hacer para que aun q se sea muestre lo que si consiguio y pues me pinte en log que la 17 not found sin q se pare el codigo.

Edgar Oswaldo Vargas Jara
Interesante, quedé con la misma duda
Emmanuel Maximino Lopez Licea
Solo me reporta un error pero yo me referia cuando intentabas llamar 100 personajes, solo exiten 83 por eso los errores, en fin el personaje lo busque y no existe como lo explico arriba, pero mi pregunta es si hay un solo error ya no temostrara todos los demas datos, eso a mi parecer es fatal, por eso busco una manera de como solucionarlo.

Roger Carlos Ariel Alba
Hola Emma,
¿Ya intentaste buscar solo el personaje 17? ¿Existe?
por otro lado JS al encontrar un error se detendrá y te reportará unicamente un error y no una cadena de los mismos.
Saludos