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

158
Vistas
¿Por qué se ejecuta el código de espera antes que el código de sincronización?

Tengo una función de usuario de registro que realmente no entiendo cómo funciona...

 module.exports.signupUser = async (req, res) => { let email = req.body.email; let password = req.body.password; if(!validator.isEmail(email)) { res.status(400).json({ "message": "Please enter a valid email!" }).end(); } else if(!validator.isLength(password, {min:6})){ res.status(400).json({ "message": "Password must have at least 6 characters!" }).end(); } else { const salt = bcrypt.genSaltSync(10); const hashedPassword = await bcrypt.hash(password, salt); let params = [email, hashedPassword]; console.log(hashedPassword); let query = 'insert into users (email, password) values (?,?)'; connection.query(query, params, (err, result, fields) => { if(err && err.code === 'ER_DUP_ENTRY') { res.status(400).json({ "message": "There is an account already associated with this email adress!" }).end(); } else { res.status(200).json({ "message": "User created!" }).end(); } }); }

}

Entonces, en el último caso, uso await bcrypt.hash (contraseña, sal) para cifrar mi contraseña. Soy nuevo en JS, pero aún así entiendo que await ejecuta el código de forma asincrónica, por lo que console.log (hashedPassword) no debería devolverme la contraseña cifrada porque este registro se ejecutará antes que el hash real. ¿Alguien puede explicarme qué está pasando realmente?

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

0

const hashedPassword = await bcrypt.hash(password, salt); console.log(hashedPassword);

Si usa la palabra clave await, nodejs esperará a que se resuelva la promesa antes de pasar a la siguiente línea en la función asíncrona. El resultado de su console.log será la contraseña cifrada.

Si no usa la palabra clave await, el nodo comenzará a resolver la promesa pero no esperará a que termine de resolverse antes de pasar a la siguiente línea. El resultado de su console.log será Promise {pendiente}

about 4 years ago · Juan Pablo Isaza Denunciar

0

await ejecuta el código sincrónicamente. Entonces, en su caso, await esperará la ejecución de bcrypt.hash .

Para mayor claridad, la función bcrypt.hash devuelve una promise y ahora tenemos dos opciones aquí.

1. Esperar a que se resuelva la promesa

 const hashedPassword = await bcrypt.hash(password, salt); console.log(hashedPassword);

hashedPassword contendrá el resultado real que necesitamos.

2. Manejar la resolución de la promesa usando then

 bcrypt.hash(password, salt).then(hashedPassword => { console.log(hashedPassword); })

Como la función bcrypt.hash devuelve una promesa, debemos manejar el resto del código dentro de un bloque luego, ya que solo devolverá el valor una vez que la función resuelva la promesa.

En caso de que desee ejecutar su código de asynchronously , debe eliminar la palabra clave await que espera a que se resuelva la promesa antes de pasar a la siguiente línea.

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