Ćwiczę asynchroniczne oczekiwanie i mam tablicę, która jest tablicą odpowiedzi, do której myślę, że muszę wywołać .json (), aby przeanalizować odpowiedź, ale wciąż pojawiają się błędy, każdy pomysł, jak mogę rozwiązać te odpowiedzi na to dostaję json, który próbuję dostać?

To jest kod, który widzisz na dole, to jest problematyczny wiersz: return responses.map( r => r.json())

Tutaj id kodpen: https://codepen.io/giorgiomartini/pen/OJJzKoM?editors =1011 a to cały kod:

const TITLE = 'Princess Mononoke'

async function getMoro(url) {
  const moviesResponse = await fetch(url)
  const movies = await moviesResponse.json()
  const movie = movies.find(movie => movie.title = TITLE)
  const speciesLink = movie.species[0]
  const speciesResponse = await fetch(speciesLink)
  const specie = await speciesResponse.json()
  const people = specie.people
  const PromisesOfResponsesOfPeopleUrls = people.map(async peopleUrl => {
    return await fetch(peopleUrl)
  })

  const responses = Promise.all(PromisesOfResponsesOfPeopleUrls)



  return responses.map( r => r.json())
}

getMoro('https://ghibliapi.herokuapp.com/films')
  .then(c => console.log('c: ', c))
0
user2643810 5 listopad 2019, 14:21
Jaki jest błąd, który otrzymujesz?
 – 
VLAZ
5 listopad 2019, 14:23
7
Promise.all zwraca obietnicę.
 – 
ASDFGerte
5 listopad 2019, 14:24
3
movies.find(movie => movie.title = TITLE) to przypisanie, a nie sprawdzenie równości, użyj == lub ===
 – 
nick zoum
5 listopad 2019, 14:25
Czy istnieje powód oddzielnej rozmowy .map(r => r.json())? Dlaczego nie fetch(peopleUrl).then(response => response.json())?
 – 
Andreas
5 listopad 2019, 14:34

1 odpowiedź

Masz kilka błędów w swoim kodzie.

  1. movies.find(movie => movie.title = TITLE) musisz zastąpić = operatorem ==. Do przypisania używany jest jeden równy operator. Dla porównania musisz użyć podwójnego operatora równości.

  2. Musisz poczekać na wynik Promise.all

  3. Musisz także rozwiązać obietnice zwrócone przez r.json w funkcji map

const TITLE = 'Princess Mononoke';

async function getMoro(url) {
  const moviesResponse = await fetch(url);
  const movies = await moviesResponse.json();
  const movie = movies.find(movie => movie.title == TITLE);
  
  const speciesLink = movie.species[0];
  const speciesResponse = await fetch(speciesLink);
  const specie = await speciesResponse.json();
  const people = specie.people;
  
  const PromisesOfResponsesOfPeopleUrls = people.map(async peopleUrl => await fetch(peopleUrl));
  
  let responses = await Promise.all(PromisesOfResponsesOfPeopleUrls)
 
  responses = responses.map(r => r.json());
  
  return await Promise.all(responses)
}

getMoro('https://ghibliapi.herokuapp.com/films')
  .then(c => console.log('c: ', c))
0
Yousaf 5 listopad 2019, 14:34