Как получить данные из массива URL с топором ios и обещаниями - PullRequest
1 голос
/ 22 марта 2020

У меня есть конечная точка, которая дает мне информацию о конкретном c символе, выглядит следующим образом:

Конечная точка: https://rickandmortyapi.com/api/character/1

, которая возвращает мне объект с именем персонажа, а также других свойств, одно из этих свойств называется эпизодом.

{
  name: 'Ricky',
  id: 1,
  episode: [...]
}

И свойство эпизода содержит множество URL, которые выглядят так:

[
  "https://rickandmortyapi.com/api/episode/1",
  "https://rickandmortyapi.com/api/episode/2",
  "https://rickandmortyapi.com/api/episode/3"
  ...
]

I знаю, что я должен использовать Promise.all и каким-то образом l oop поверх них, а затем разрешить их, но я не могу заставить его работать.

Это то, что я пытался, но я не знаю, правильно ли это, и это всегда дает обещание, независимо от того, сколько раз я делаю .then

let episodeResponses;

  const episodesResponses = Promise.all(character.episode.map(url => {
    return axios(url)
      .then(resp => episodeResponses = resp)
  }))

  episodesResponses.then(x => console.log(x))

Есть идеи, как заставить это работать?

Спасибо

1 Ответ

1 голос
/ 22 марта 2020

В упрощенном виде этот вызов API будет выглядеть примерно так:

const episodes = [
    axios('https://rickandmortyapi.com/api/episode/1'),
    axios('https://rickandmortyapi.com/api/episode/2'),
    axios('https://rickandmortyapi.com/api/episode/3')
];

Promise.all(episodes).then((data) => {
  const episode1 = data[0];
  const episode2 = data[1];
  const episode3 = data[2];
});

Вместо этого вызовите .then() на Promise.all. Как только все обещания будут выполнены, вы получите доступ к своим данным.

// Create a promise using Promise.all().
const episodeResponses = Promise.all(character.episode.map(url => axios(url)));

// Access the response once all promises are resolved.
episodesResponses.then(x => console.log(x))
...