Guest User

Untitled

a guest
Oct 19th, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.58 KB | None | 0 0
  1. /*
  2. Tempo esperado para resolver: 30 minutos
  3.  
  4. Descrição do problema:
  5. Temos uma função chamada listWithPagination que retorna um array de registros paginados.
  6. A única maneira de conseguir um array com todos os registros,
  7. é fazer requisições sequenciais para cada página, concatenando os resultados.
  8.  
  9. Descrição da solução:
  10. Criar uma função chamada concatenateResults, que receba como parâmetro a função original
  11. que retorna os dados paginados, e chama essa função sequencialmente para cada página,
  12. até que a resposta seja um array vazio, o que indica que a paginação terminou.
  13. Retornar uma Promise que resolve com um array contendo todos as páginas concatenadas.
  14.  
  15. Tarefa:
  16. Baseado na solução acima, implementar o corpo da função abaixo concatenateResults.
  17. 1) Não é permitido modificar nenhuma outra função.
  18. 2) Não é permitido fazer require de outro módulo.
  19. 3) Não é permitido criar funções ou variáveis fora da função.
  20. 4) O mais importante é clareza e simplicidade do código.
  21. 5) A quantidade de páginas é desconhecida, por isso a solução precisa funcionar para "n" páginas,
  22. a única maneira de saber que não tem mais páginas é o fato de retornar um array vazio.
  23. 6) Faça uma cópia em um gist privado (secreto) e envie o link por email.
  24. 7) Modifique apenas a linha @TODO.
  25. */
  26.  
  27. // Cria uma resposta falsa para testar localmente
  28. function buildFakeResult(page) {
  29. if (page > 4) {
  30. return []
  31. } else {
  32. return [
  33. {
  34. product: `Nome do Produto ${page * 2 - 1}`,
  35. price: page * 7.50 + 3.21
  36. },
  37. {
  38. product: `Nome do Produto ${page * 2}`,
  39. price: page * 7.50 + 2.59
  40. }
  41. ]
  42. }
  43. }
  44.  
  45.  
  46. // Função falsa para simular uma requisição,
  47. // Um array vazio representa o fim da paginação
  48. function listWithPagination(page) {
  49. return Promise.resolve(buildFakeResult(page))
  50. }
  51.  
  52. // Função que concatena o resultado de todas as páginas
  53. function concatenateResults(callback, page = 1) {
  54. // @TODO: implementar esta função
  55. }
  56.  
  57. // Para utilizar, basta passar como parâmetro a função que retorna os dados paginados
  58. concatenateResults(listWithPagination)
  59. .then(data => console.log(data))
  60. /*
  61.  
  62. Executar utilizando node async-concat.js
  63. saída esperada:
  64.  
  65. [ { product: 'Nome do Produto 1', price: 10.71 },
  66. { product: 'Nome do Produto 2', price: 10.09 },
  67. { product: 'Nome do Produto 3', price: 18.21 },
  68. { product: 'Nome do Produto 4', price: 17.59 },
  69. { product: 'Nome do Produto 5', price: 25.71 },
  70. { product: 'Nome do Produto 6', price: 25.09 },
  71. { product: 'Nome do Produto 7', price: 33.21 },
  72. { product: 'Nome do Produto 8', price: 32.59 } ]
  73.  
  74. */
Add Comment
Please, Sign In to add comment