Estoy 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 ...

Pregunta de la clase:
Múltiples promesas en paralelo
Emmanuel Maximino Lopez Licea

Emmanuel Maximino Lopez Licea

Pregunta
studenthace 5 años

Estoy 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.
5 respuestas
para escribir tu comentario
    Leonardo Aedo Jimenez

    Leonardo Aedo Jimenez

    studenthace 4 años

    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)
    ), y por ultimo esta la propiedad reason que se agrega cuando es rejected y tiene el valor que devolvemos como error de la promesa (que en el curso ha sido
    reject(id
    ) )

    Captura9.PNG

    mas información aquí en la documentación de mozilla

    Leonardo Moreno Faberón

    Leonardo Moreno Faberón

    studenthace 5 años

    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

    Edgar Oswaldo Vargas Jara

    studenthace 5 años

    Interesante, quedé con la misma duda

    Emmanuel Maximino Lopez Licea

    Emmanuel Maximino Lopez Licea

    studenthace 5 años

    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

    Roger Carlos Ariel Alba

    studenthace 5 años

    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

Fundamentos de JavaScript 2018

Fundamentos de JavaScript 2018

JavaScript es un lenguaje de programación que se trabaja desde el navegador. Construye programas, conoce el entorno, los condicionales y las estructuras repetitivas. Aprende cuáles son y cómo se declaran las variables y las funciones de JS.

Fundamentos de JavaScript 2018
Fundamentos de JavaScript 2018

Fundamentos de JavaScript 2018

JavaScript es un lenguaje de programación que se trabaja desde el navegador. Construye programas, conoce el entorno, los condicionales y las estructuras repetitivas. Aprende cuáles son y cómo se declaran las variables y las funciones de JS.