1
resposta

Realizar fetch de vários elementos de um array

Boa tarde.

Eu tenho o seguinte array de objetos e gostaria de realizar uma requisição fetch em cada elemento do array "films".

const data = [
  {
    "name": "Luke Skywalker", 
    "homeworld": "http://swapi.dev/api/planets/1/", 
    "films": [
      "http://swapi.dev/api/films/1/", 
      "http://swapi.dev/api/films/2/", 
      "http://swapi.dev/api/films/3/", 
      "http://swapi.dev/api/films/6/"
    ], 
    "url": "http://swapi.dev/api/people/1/"
  }, 
  {
    "name": "Anakin Skywalker", 
    "homeworld": "http://swapi.dev/api/planets/1/", 
    "films": [
      "http://swapi.dev/api/films/4/", 
      "http://swapi.dev/api/films/5/", 
      "http://swapi.dev/api/films/6/"
    ], 
    "url": "http://swapi.dev/api/people/11/"
  }, 
]

Eu tentei utilizar um Promise.all(), mas não deu muito certo:

const getNames = () => {
  const datas = data.map(({ films }, i) => Promise.all(films.map(film => fetch(film).then(res => res.json()))).then(res => res))
}

getNames();

Alguém tem uma solução para isso?

Desde já, agradeço pela atenção!

1 resposta

Fala ai Thales, tudo bem? Na verdade seria o Promise.all, só tem um pequeno detalhe.

Em vez de você fazer o Promise.all dentro do primeiro map, você faz o map do Promise.all:

Promise.all(data.map(({ films }, i) => Promise.all(films.map(film => fetch(film).then(res => res.json()))).then(res => res))).then(() => {
    // aqui nesse then você deveria ter todos os Promises.
})

Mas, esse código pode não ser um dos melhores em performance, precisaria entender melhor o que precisa fazer para pensar em otimizações.

Espero ter ajudado.