Realmente para trabajar con bucles asíncronos es una mejor práctica y ayuda en performance hacer un for of, que usar un map
dure varias horas buscando un error, pero me di cuenta que utilizaba "result" y era "results" me di cuenta al revisar el documento de las API, por es importante leer las recomendaciones del fabricante de la API https://pokeapi.co/docs/v2
Cierto, yo estoy realizando el proyecto con otra api y en ella listan cada result como 'items'.
Estas cosas no pasan con typescript. :v
No, en serio no pasan, yo estoy realizando el proyecto de esta manera y todo bien, es magnifico ver los errores directamente en VSC.
~ Que tal Platzinauta, ya conectamos en LinkedIn? ~
¡Que estas esperando! Conectemos en LinkedIn, GitHub, Medium, Redes sociales o unete al mejor servidor de Discord sobre Python y ciencia de datos en español.
tuve un error bastante traumante ajajaja, en videos anteriores en pokedexNavegation, cambie el orden ,pokemon estaba de primero... asi que claro, la visualizacion era pokemon y no pokedex, no encontraba por que no me servia la consulta de api jajajaja es gracioso... y quizas alguien novato tambien le pase
No se está usando las excepciones de manera correcta, solo es necesario hacer handeling de una excepción una vez, es mala práctica devolver el mismo error.
asyncfunctionfuncionFetch(){try{// hacer fetch de algo}catch(e){throw e
// mala practica}}
Codigo de juego para que prueben
const fetch =require('node-fetch');// funcion que pide algo no necesita que devuelvea el errorasyncfunctionfuncionFetch(){const promise =fetch('Soy una url que no existe');const response =await promise;const data =await response.json();console.log(data);}// funcion que realmente maneja el errorasyncfunctionerrorFunction(){try{awaitfuncionFetch()}catch(error){console.log("Vamo a calmarno");}}errorFunction();
aqui les dejo el código en node para que lo prueben
Alguien tiene este error? undefined is not an object (evaluating 'o[Symbol.iterator]')
El error se soluciono poniendole una s que me faltaba en el for await.
Antes lo tenia asi
for await (const pokemon of response.result)
Despues de corregir el error:
for await (const pokemon of response.results)
A mi me presenta este problema
LOG Pokemons---> []
ERROR [TypeError: Cannot convert undefined value to object]
Con este bloque de codigo:
const pokemonsArray = [];
for await (const pokemon of response.result){
const pokemonDetails = await getPokemonsDetailsByUrlApi(pokemon.url);
console.log(pokemonDetails);
}
Alguien me puede ayudar?
first commit, jejejeje
Sip y la ventaja es que inicia git de manera automatica.
Interesante ejercicio, hay algunos conceptos que hay que repasar.
Hago todo lo que esta aquí y no me sale anda en consola, no se si este curso ya es bastante antiguo porque ya estamos en al versión 7 de React y algunas cosas no me sirven o son innecesarias hacerlas o hice algo más, en todo caso copie literal el codigo de al repo y no me funcionó tampoco si alguien tiene alguna solución o comentario constructivo se lo agradecería :)
tenia el mismo porblema en mi caso fue el orden de los stack.screen en pokedexnavigation.
orden correcto:
No es muy recomendable usar un loop con peticiones asíncronas, debido a que siempre se esperara a resolver una promesa antes de iterar a la siguiente vuelta del loop, en estos casos es mejor utilizar un Promise.all para resolverlas en paralelo y luego retornar un array de respuestas.
Valido tu punto de vista, pero depende del enfoque no es una mala práctica, si tu quieres ir viendo conforme vas cargando, lo mejor es hacerlo como indica el mentor, si lo que buscas es tener toda la información lo más rápido posible y renderizar cuando ya lo tengas todo es mejor usar en paralelo, todo tiene su momento y su lugar.
podemos utilizar variables de entornos💚
Buenas tardes, realice todo el codigo y lo revise con los recursos, y me arroja el siguiente error:
ERROR [TypeError: undefined is not an object (evaluating 'pokemonDetails.type[0]')]
Espero poder tener alguna respuesta, gracias
pusiste : ‘pokemonDetails.type[0]’
pero es en prural:
‘pokemonDetails.types[0]’
[TypeError: Cannot convert undefined value to object]
Porque me sale este error al correr la app, y no me arroja la informacion de los pokemon.
Hola, tengo un problema, no logro visualizar con el console.log nada en la pantalla de la consola, a pesar de que no sale ningún error, limpia la solución, volví a cargar y nada.
Alguién puede apoyarme con alguna otra opción ?
Hola jecma puede que haya un error en tú código te recomiendo usar la técnica del patito de hule !
Hola, es posible que tengas configurada tu consola para que no aparezca toda la información. Esto lo puedes cambiar dando click en esta opción y colocar predeterminado o información.
Sino, puede ser un error en tu código, coloca un alert en tu archivo JS para saber si está enlazado correctamente.
En vez de "for" se podria usar "map" o es para usos distintos?
Un for no tiene por qué devolver nada, pero el map siempre debe devolver algo.
Para los que son fanáticos de Pokémon, sabrán que hay pokémon que tienen 2 tipos y lo lógico sería hacer esto:
Aunque esto hace los pokémon que tienen un solo tipo tengan un segundo tipo null. Si a alguien se le ocurre una mejor forma sería genial :D
Hola, no salgo de ahí. He revisado y comparado el código con el del profe pero, me sigue saliendo ese error y no puedo avanzar.
Ayuda porfa...: (
sin ver tu codigo se me ocurre que el problema esta en el api => pokemon ahi en la función getPokemonApi declaramos url asi:
const url = ${API_HOST}pokemon?limit=20&offset=0;
por ahi deberia estar el problema , por que en tui liena 14 que es la otra funcion, estas usando url y es donde rompe espero te sirva
no está bien estructurado tu url, tendrias que hacer un console.log(url) para ver que tiene dentro y así construirlo bien.
Se puede unificar el archivo de la API para hacerlo mas reutilizable.
exportasyncfunctioncallApi(url){try{const response =awaitfetch(url);const result =await response.json();return result;}catch(error){throw error;}}exportasyncfunctiongetPokemonsApi(){const url =`${API_HOST}/pokemon?limit=20&offset=0`;returnfetchApi(url);}exportasyncfunctiongetPokemonDetailsByUrlApi(url){returnfetchApi(url);}
Con Promise.all funciona mejor
constgetPokemons=async(filters)=>{setData({loading:false,data:[],error:null});//Intentamos obtener todos los pokemones usando el filtro especificadotry{const response =await api.pokemons.getAllPokemons(filters);//Creamos una promesa para obtener los detalles de cada pokemonconst pokemonResults =awaitPromise.all( response.results.map(async(pokemon)=>{const getPokemonsDetails =await api.pokemons.getOnePokemon( pokemon.name);//Retornamos los detalles del pokemon en un objeto con los campos necesariosreturn{id: getPokemonsDetails.id,name: getPokemonsDetails.name,types: getPokemonsDetails.types[0],order: getPokemonsDetails.order,image: getPokemonsDetails.sprites.other.home.front_default,};}));//Actualizamos el estado con los datos obtenidos y cambiamos el loading a false para indicar que ya se completó la peticiónsetData({loading:false,data: pokemonResults });}catch(error){//En caso de error mostramos el mensaje en la consola y actualizamos el estado con el error ocurridoconsole.error(error);setData({loading:false, error });}};
Hola buenas, tengo todo el codigo como muestra el profesor, pero me arroja error; no puede encontrar la variable url.
Hola Stephano, esta funcion esla que esta en el archivo de la carpeta api, la que el profesor tienen nombrada como getPokemonsApi() fijate bien que este recibiendo la url bien en la tercera linea, y que estes usando las comillas francesas creo se llaman para poder concatenar los strings
exportconst getAllCharacters =async(page: number =1):Promise<AllCHaracters|Error>=>{try{const url =`${apiInfoUrl}/people/?page=${page}`const response =awaitfetch(url);const result =await response.json();return result;}catch(error){throw error;}}