Aquí está el código con async (devuelve undefined
)
userService.register = (username, password) => { return bcrypt.hash(password, saltRounds, async(err, hash) => { const newUser = new user({ username: username, password: hash }) return await newUser.save() }) }
y este es el mismo código con .then
, funciona correctamente
userService.register = (username, password) => { return bcrypt.hash(password, saltRounds) .then(hash => { const newUser = new user({ username: username, password: hash }) return newUser.save() }) }
Este es un comportamiento documentado:
Está pasando una devolución de llamada en su primer ejemplo, por lo que bcrypt
no devuelve una promesa.
Otra forma de escribir su código es hacer que la función de ajuste sea async
:
userService.register = async (username, password) => { const hash = await bcrypt.hash(password, saltRounds); const newUser = new user({ username: username, password: hash }) return await newUser.save(); // or just `return newUser.save()` }