Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Tempo esperado para resolver: 30 minutos
- Descrição do problema:
- Temos uma função chamada listWithPagination que retorna um array de registros paginados.
- A única maneira de conseguir um array com todos os registros,
- é fazer requisições sequenciais para cada página, concatenando os resultados.
- Descrição da solução:
- Criar uma função chamada concatenateResults, que receba como parâmetro a função original
- que retorna os dados paginados, e chama essa função sequencialmente para cada página,
- até que a resposta seja um array vazio, o que indica que a paginação terminou.
- Retornar uma Promise que resolve com um array contendo todos as páginas concatenadas.
- Tarefa:
- Baseado na solução acima, implementar o corpo da função abaixo concatenateResults.
- 1) Não é permitido modificar nenhuma outra função.
- 2) Não é permitido fazer require de outro módulo.
- 3) Não é permitido criar funções ou variáveis fora da função.
- 4) O mais importante é clareza e simplicidade do código.
- 5) A quantidade de páginas é desconhecida, por isso a solução precisa funcionar para "n" páginas,
- a única maneira de saber que não tem mais páginas é o fato de retornar um array vazio.
- 6) Faça uma cópia em um gist privado (secreto) e envie o link por email.
- 7) Modifique apenas a linha @TODO.
- */
- // Cria uma resposta falsa para testar localmente
- function buildFakeResult(page) {
- if (page > 4) {
- return []
- } else {
- return [
- {
- product: `Nome do Produto ${page * 2 - 1}`,
- price: page * 7.50 + 3.21
- },
- {
- product: `Nome do Produto ${page * 2}`,
- price: page * 7.50 + 2.59
- }
- ]
- }
- }
- // Função falsa para simular uma requisição,
- // Um array vazio representa o fim da paginação
- function listWithPagination(page) {
- return Promise.resolve(buildFakeResult(page))
- }
- // Função que concatena o resultado de todas as páginas
- function concatenateResults(callback, page = 1) {
- // @TODO: implementar esta função
- }
- // Para utilizar, basta passar como parâmetro a função que retorna os dados paginados
- concatenateResults(listWithPagination)
- .then(data => console.log(data))
- /*
- Executar utilizando node async-concat.js
- saída esperada:
- [ { product: 'Nome do Produto 1', price: 10.71 },
- { product: 'Nome do Produto 2', price: 10.09 },
- { product: 'Nome do Produto 3', price: 18.21 },
- { product: 'Nome do Produto 4', price: 17.59 },
- { product: 'Nome do Produto 5', price: 25.71 },
- { product: 'Nome do Produto 6', price: 25.09 },
- { product: 'Nome do Produto 7', price: 33.21 },
- { product: 'Nome do Produto 8', price: 32.59 } ]
- */
Add Comment
Please, Sign In to add comment