当我从index.js
调用UserService.signUp()
时,我的varx
是未定义的。显然,我的函数singUp()
在await hash()
之后返回到我的router.post
函数。我该如何解决这个问题?我希望signUp
函数在函数返回之前等待hash
函数完成。
index.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) {
...
}
})
auth.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');
}
user.js:
function createUser(username, email, salt, hash) {
...
console.log("created user")
return true
}
电流输出(错误):
generated salt
debug
POST /register 200 17.164 ms - -
generated hash
created user
所需输出:
generated salt
generated hash
created user
debug
POST /register 200 17.164 ms - -
您没有等待函数:
var x = UserService.signUp(username, password, email);
使包含函数async
和await
为结果:
router.post('/register', async (req, res) => {
//...
var x = await UserService.signUp(username, password, email);
//...
});
或者附加.then()
来处理Promise
的结果:
UserService.signUp(username, password, email).then(x => {
console.log("debug")
if (x.success) {
//...
}
});