estoy aprendiendo promesas para la escuela y hay muchas cosas que no entiendo
async function getCompanion(name){ const response = await fetch("https://rickandmortyapi.com/api/character/?name=" + name) if(response.status !== 200) throw `HTTP error: ${response.status}`; const data = response.json() return data .then((body) => { const [index] = body.results; const ceo = index.episode let friends = []; friends.push(ceo); return fetchAll(friends); }) .then((body2) => { const [index2] = body2; const ceo2 = index2.characters let friends2 = []; friends2.push(ceo2); //console.log(friends2) return fetchAll(friends2) }).then((body3) =>{ console.log(body3); }) .catch( (error) => { console.log(`Error: ${error}`) }) } async function fetchAll(urls){ const res = await Promise.all(urls.map(u => fetch(u))) const jsons = await Promise.all(res.map(r => r.json())) console.log(jsons) return jsons }Lo que quiero hacer:
es una función asíncrona que cuando pasas un nombre obtienes el nombre de los compañeros que comparten un episodio con el nombre usado, mi problema es que el primero. Entonces funciona como quiero, obtengo los episodios donde participa el personaje, pero el segundo fetchAll no funciona, y no se porque, la idea es que el segundo fetchAll obtenga los datos de cada personaje en friends2
creo que mi código es un desastre, pero estoy empezando a aprender promesas, lo siento si el código es horrible
.then((body) => { const [index] = body.results; const ceo = index.episode let friends = []; friends.push(ceo); return fetchAll(friends); })Haz este cambio y debería funcionar. fetchAll() es una función asíncrona que devuelve la promesa, ya sea que necesite esperar antes o simplemente devolverla directamente porque de todos modos no está usando esa constante de caracteres .