cuando llamo a UserService.signUp() desde index.js , mi var x no está definida. aparentemente mi función singUp() regresa a mi función router.post después de await await hash() . ¿Cómo puedo solucionar este problema? Me gustaría que la función signUp espere a que se complete la función hash , antes de que la función regrese.
índice.js:
router.post('/register', (req, res) => { var username = req.body.username, password = req.body.password, email = req.body.email var x = UserService.signUp(username, password, email); console.log("debug") if (x.success) { ... } })autenticación.js:
async function signUp(username, password, email) { .... try { var salt = generateSalt() console.log("generated salt") var passwordHash = await hash(password, salt) console.log("generated hash") } catch (err) { console.error(err) } UserModel.createUser() return { success: true, description: 'User was created' } } function hash(password, salt) { return pbkdf2(password, salt, 10000, 64, 'sha512'); }usuario.js:
function createUser(username, email, salt, hash) { ... console.log("created user") return true }salida actual (incorrecta):
generated salt debug POST /register 200 17.164 ms - - generated hash created usersalida deseada:
generated salt generated hash created user debug POST /register 200 17.164 ms - -No estás esperando la función:
var x = UserService.signUp(username, password, email); Haga que la función contenedora sea async y await el resultado:
router.post('/register', async (req, res) => { //... var x = await UserService.signUp(username, password, email); //... }); O agregue un .then() para manejar el resultado de la Promise :
UserService.signUp(username, password, email).then(x => { console.log("debug") if (x.success) { //... } });