Skip to content

Instantly share code, notes, and snippets.

@brunohcastro
Forked from talyssonoc/desafio-promises.md
Last active April 4, 2022 12:22
Show Gist options
  • Save brunohcastro/8b5a4c8421b450704e4c01855c4e9da1 to your computer and use it in GitHub Desktop.
Save brunohcastro/8b5a4c8421b450704e4c01855c4e9da1 to your computer and use it in GitHub Desktop.
Nested Fetch

Desafio

Vamos montar uma listagem de blog posts, com usuários e comentários. A API que vamos usar pode ser encontrada no seguinte repositório: https://github.com/typicode/json-server

Tarefa 1 - Listagem de Posts e Comentários

  • Faça a requisição de 115 posts, de 20 em 20 posts por request, da URL https://jsonplaceholder.typicode.com/posts, a documentação da paginação está aqui https://github.com/typicode/json-server#paginate.
  • Estas requisições devem ser feitas sequencialmente (só requisita os próximos 20 depois que terminar de requisitar tudo dos 20 anteriores)
  • Para cada vez que 20 posts forem carregados, carregar todos os comentários de cada um deles de maneira concorrente/paralela (ou seja, requisitar os comentários de todos os 20 posts ao mesmo tempo).
  • Para pegar os comentários de um post você usa a URL https://jsonplaceholder.typicode.com/posts/ID_DO_POST/comments. Isso deve ser feito antes de carregar os próximos 20 posts.
  • Renderizar a lista apenas após todas as requisições anteriores estarem completas
  • Tratar qualquer erro que possa acontecer durante a requisição

⚠️ Atenção ⚠️ - Usar apenas .then e .catch nessa tarefa

Tarefa 2 - Carregamento de usuários

  • Após carregar todos os posts, carregar os usuários de todos os 115 posts concorrentemente/paralelamente.
  • Para carregar um usuário usa-se a URL https://jsonplaceholder.typicode.com/users/ID_DO_USUARIO. Lembrando que um mesmo usuário pode ter mais de um post, então o mesmo usuário não deve ser carregado duas vezes

No final, precisaremos ter a seguinte estrutura:

[
  {
    /* ...dados do post, /
    user: {}/ dados do user autor do post /,
    comments: []/ array de comentários desse post */
  }
]

⚠️ Atenção ⚠️ - Usar apenas .then e .catch nessa tarefa

Tarefa 3 - Refatoração para Async/Await

  • Refatorar todo o código para usar async/await no lugar de .then .catch

Bonus

  • Agora vamos adicionar links de paginação na listagem. Refatorar a função para não carregar todos os posts de uma só vez, ao invés disso devemos ter a paginação sob demanda;
  • O comportamento da listagem deve ser o mesmo das tarefas anteriores, mostrando todos os comentários e usuários dos posts carregados para a página;
  • Não requisitar o usuário caso já tenha sido carregado em alguma pagina anterior;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment