Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

160
Visualizações
cómo se puede mejorar el rendimiento del bucle for anidado

Aquí está mi bucle for, se ejecuta en 2 enumeraciones y las envía al servidor, obtiene un valor y calcula el valor a través de otro bucle for. Seguro que se puede mejorar. aquí está el código:

 const paths = []; for await (let category of Object.values(CategoriesEnum)) { for await (let format of Object.values(FormatsEnum)) { const totalPosts = await getPagesCount(category, format); const totalPages = Math.ceil(totalPosts.offsetPagination.total / 12); for (let page = 1; page <= totalPages; page++) { paths.push({ params: { category: category , format: format page: page } }); } } } return paths;

Mi objetivo principal es reducir el tiempo, aunque entiendo que el servidor recibirá la misma cantidad de consultas, por lo que las diferencias no serán enormes. Gracias.

about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

Puede usar [Promise.all][1].

Aquí está el fragmento de muestra.

 let promises = []; let paths = []; Object.values(CategoriesEnum).forEach(category => { Object.values(FormatsEnum).forEach(format => { promises.push(getPagesCount(category, format)) }) }); const totalPostCounts = await Promise.all(promises); totalPostCounts.forEach(totalPosts => { const totalPages = Math.ceil(totalPosts.offsetPagination.total / 12); for (let page = 1; page <= totalPages; page++) { paths.push({ params: { category: category, format: format, page: page } }); } }); return paths; [1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all

Otro enfoque usando los mismos métodos

 let promises = []; let paths = []; /* Gather Api calls */ Object.values(CategoriesEnum).forEach(category => { Object.values(FormatsEnum).forEach(format => { promises.push(getPath(category, format)) }) }); // wait for the call const pathsArray = await Promise.all(promises); // flat the array pathsArray.forEach(pathArray => { paths = paths.concat(pathArray) }); async function getPath(category, format) { let paths = []; const totalPosts = await getPagesCount(category, format); const totalPages = Math.ceil(totalPosts.offsetPagination.total / 12); for (let page = 1; page <= totalPages; page++) { paths.push({ params: { category: category, format: format, page: page } }); } return paths; }
about 4 years ago · Juan Pablo Isaza Relatório

0

Para empezar, dividiría la lógica en 3 partes:

  1. Preparar llamadas asíncronas
  2. Resolver llamadas asíncronas en paralelo
  3. Aplicar mi lógica de negocios
 const pagesPromises = [] for (let category of Object.values(CategoriesEnum)) { for (let format of Object.values(FormatsEnum)) { pagesPromises.push(getPagesCount(category, format)) } } const totalPostsResults = await Promise.all(pagesPromises) const paths = []; totalPostsResults.forEach(totalPosts => { const totalPages = Math.ceil(totalPosts.offsetPagination.total / 12); for (let page = 1; page <= totalPages; page++) { paths.push({ params: { category: category , format: format page: page } }); } }) return paths;
about 4 years ago · Juan Pablo Isaza Relatório

0

Como sugieren otras respuestas, puede usar Promise.all() . Sin mucha refactorización puedes escribir:

 const getStaticPaths = async () => { const paths = []; const promises = []; // : Array<Promise<void>> in ts Object.values(CategoriesEnum).forEach((category) => { Object.values(FormatsEnum).forEach((format) => { promises.push(async () => { const totalPosts = await getPagesCount(category, format); // <-- confusing name though, I'd prefer `getPostsCount` instead const totalPages = Math.ceil(totalPosts.offsetPagination.total / 12); for (const page = 1; page <= totalPages; ++page) paths.push({ params: { category: category, format: format, page: page } }); }); }); }); await Promise.all(promises); return { paths }; }; export { getStaticPaths };
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda