函数在await解析promise之前返回



当我从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);

使包含函数asyncawait为结果:

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) {
//...
}
});

最新更新