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

96
Vistas
async/await/forEach función no espera respuesta
async function updateJSON(original_JSON, assets_arr) { Object.keys(original_JSON).forEach(key => {original_JSON[key].active = false}); // reset all records Object.keys(assets_arr).forEach(async key => { let idx = original_JSON.findIndex(x => x.name === assets_arr[key].name); if (idx === -1) { // no match -> insert a new record const code_nr = await getCode(assets_arr[key].token_id); let debug = original_JSON.push({ name: assets_arr[key].name, active: true, code: code_nr }); console.log("List len now:", debug); } else { original_JSON[idx].active = true; } // there is a match, so just update existing record to become 'active' }); return original_JSON; } console.table(await updateJSON(original_JSON, assets_arr));

No puedo encontrar una manera para que el código espere a que finalice await getcode antes de devolver la función. Obtengo una ejecución parcial de inmediato y solo entonces el código relacionado con original_JSON.push se ejecuta un registro a la vez.

Si async de la línea 3 y await de la línea 6, la función se ejecuta secuencialmente (¿sincrónicamente?), excepto que obtengo "Promise { }" en lugar del número de código que se supone que debe recuperar la función getCode . Este número proviene de una URL fetch() .

Leí Async/Await sin esperar y creo que mi problema está relacionado. ¿Necesito usar map() en lugar de forEach() ? Encuentro map() confuso. Quiero mutar la matriz, no estoy interesado en hacer una nueva (aunque lo haré si eso es lo que solucionará esto).

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Obtuve la solución de Nodejs. La función forEach no espera funciones asíncronas : reemplazar el async forEach con un bucle for soluciona el problema. Un bucle while también debería funcionar. ¡Estos sofisticados métodos de bucle hacen tropezar a la gente cuando los simples funcionan mejor!

 async function updateJSON(original_JSON, assets_arr) { Object.keys(original_JSON).forEach(key => {original_JSON[key].active = false}); // reset all records for (const key in assets_arr) { let idx = original_JSON.findIndex(x => x.name === assets_arr[key].name); if (idx === -1) { // no match -> insert a new record const code_nr = await getCode(assets_arr[key].token_id); let debug = original_JSON.push({ name: assets_arr[key].name, active: true, code: code_nr }); console.log("List len now:", debug); } else { original_JSON[idx].active = true; } // there is a match, so just update existing record to become 'active' }; return original_JSON; } console.table(await updateJSON(original_JSON, assets_arr));
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