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

181
Visualizações
esperar mientras el ciclo termina

Tengo una función de flecha que obtiene dos matrices como parámetros y luego, en ciertas condiciones, empujo elementos de la segunda matriz a la primera matriz

El problema es que tengo una gran cantidad de datos que debo enviar y res.send puedo esperar mientras finaliza el ciclo y me envía un error sobre la memoria JavaScript heap out of memory

¿Cómo puedo esperar mientras mi ciclo termina y hacer que el ciclo funcione más rápido? Solo intento con async/await, promiseAll, para esperar

 let mergeById = async(arr1, arr2) => { arr1.map(async(item) => { item.properties = []; await arr2.map(async(prop) => { if (item.item_id == prop.item_id) { await item.properties.push(prop); } }) }) return arr1 } async someFunction(req, res) { arr1 = dataItems(); //6000 items arr2 = dataProps(); //60000 items let result = await mergeById(arr1, arr2); res.json({ data: result }) }

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

0

Tiene un mapa dentro del mapa, por lo tanto, para cada elemento en la matriz 1 iterará en toda la matriz 2. Ha encontrado una complejidad O(n^2) y, como puede ver, incluso con 66 000 elementos (que no es mucho para la computadora en propio), se está encontrando con un gran impacto. Porque tienes que hacer 6 000 * 60 000 = 360 000 000 iteraciones

Hay una solucion. Debe realizar un preprocesamiento: cree new Map() para array2, itere sobre todos los elementos y guarde item_id como una clave con valor true . Algo así como array2Map.set(prop.item_id, prop)

Luego cambia tu ciclo para consultar tu mapa

 arr1.map(async(item) => { item.properties = []; const prop = array2Map.get(item.item_id); if (prop) { item.properties.push(prop) }

Ahora tiene una complejidad O(n * log n) (bueno, es casi O(n) debido a la complejidad pseudo-lineal de los hashmaps, pero esa es una historia diferente, no es tan importante ahora). Y eso es lo suficientemente bueno para su caso de uso.


También hay otro problema con el uso de await y async . Simplemente elimine todo este uso de todo el código que ha presentado. No hace nada útil, pero en realidad rompe algunas cosas.

La función .map se ejecuta sincrónicamente sin importar si coloca la función async como parámetro. Simplemente creará una serie de promesas. A menos que sepa exactamente lo que está haciendo, mi consejo es que para las funciones de matriz (mapa, foreEach, reducir, etc.) nunca use la función asíncrona como parámetro, ya que en su mayoría no funcionará como espera.

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