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

359
Vistas
JavaScript async/await not working as expected

I am using async/await but it is not working as expected. The data is being updated before the promise is resolved.

export const update = async (req, res) => {
let lead = Lead.findbyid(id)
let updates = req.body.updates
if (updates.clientDetails.alternateContacts && updates.clientDetails.alternateContacts.length > 0) {
      updates.clientDetails.alternateContacts.forEach(async ele => {
        if (ele.addedOn) console.log('date exists')
        else ele.addedOn = new Date()

        if (ele.email) {
          console.log('11111111111111111111');
          let clientId = await createAutoAccount({ email: ele.email, name:ele.name, contactNumber: ele.phoneNumber })
          console.log('22222222222222222222222', clientId);
          ele.userId = clientId
        }
      })
      lead.clientDetails.alternateContacts = updates.clientDetails.alternateContacts
    }

await lead.save();
}
export const createAutoAccount = async (data) => {
let user = await User.findOne({ email: data.email });
    if (user) {
      console.log('user found =======================', user._id);
    } else {
      console.log('new user created ---------------');
      const tempObj = {
        email: data.email,
        password: data.password ? data.password : 'user123',
        full_name: data.name ? data.name : null,
        contact_number: data.contactNumber && !isNaN(data.contactNumber) ? data.contactNumber : null,
      };
      user = await User.create(tempObj);
    }

    return user._id;
}

The order of output is:

11111111111111111111 

update lead

user found ======================= 617155c8827ab456041342ad

22222222222222222222222 617155c8827ab456041342ad

what is want is:

11111111111111111111 

user found ======================= 617155c8827ab456041342ad

22222222222222222222222 617155c8827ab456041342ad

update lead

Please let me know what needs to be modified to make this work as per expectations.

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

0

I couldn't find where does the update lead log came from. But I think it should be coming from the lead.save(). If it is, the problem should be the async callback of the forEach loop.

updates.clientDetails.alternateContacts.forEach(async ele => { ... })

When you using forEach method, it accept a callback. The await in the for each method, which is the following apply only the that callback

if (ele.addedOn) console.log('date exists')
        else ele.addedOn = new Date()

        if (ele.email) {
          console.log('11111111111111111111');
          let clientId = await createAutoAccount({ email: ele.email, name:ele.name, contactNumber: ele.phoneNumber })
          console.log('22222222222222222222222', clientId);
          ele.userId = clientId
        }
      })
      lead.clientDetails.alternateContacts = updates.clientDetails.alternateContacts

Try to make the await execution context to update function instead of the callback of the forEach by changing to the following code.

export const update = async (req, res) => {
let lead = Lead.findbyid(id)
let updates = req.body.updates
if (updates.clientDetails.alternateContacts && updates.clientDetails.alternateContacts.length > 0) {
      // Use normal for loop instead of forEach with callback, the execution context will be the update function
      for(const alternateContracts of updates.clientDetails.alternateContacts) {
        if (ele.addedOn) console.log('date exists')
        else ele.addedOn = new Date()

        if (ele.email) {
          console.log('11111111111111111111');
          let clientId = await createAutoAccount({ email: ele.email, name:ele.name, contactNumber: ele.phoneNumber })
          console.log('22222222222222222222222', clientId);
          ele.userId = clientId
        }
      })
      lead.clientDetails.alternateContacts = updates.clientDetails.alternateContacts
    }

await lead.save();
}
about 4 years ago · Juan Pablo Isaza Denunciar

0

I don't have enough rep to comment, so this should probably be a comment, but look at this post.

Using async/await with a forEach loop

From what I know your issue is due to you trying to use async await within a foreach loop. I have run into issues with that in the past.

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