Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

161
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda