【发布时间】:2021-11-21 13:37:52
【问题描述】:
我有一个注册用户功能,但我不太明白它是如何工作的......
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();
}
});
}
}
最后,我使用 await bcrypt.hash(password, salt) 来加密我的密码。 我是 JS 新手,但我仍然了解 await 异步执行代码,因此 console.log(hashedPassword) 不应该返回我散列密码,因为此日志将在实际散列之前执行。谁能解释一下到底发生了什么?
【问题讨论】:
-
I understand that await executes code asyncronously...没有。 await 会导致您的应用程序在继续执行下一行之前等待异步完成的代码。没有它,异步代码将与它后面的行同时运行。我认为你的理解倒退了 -
这方面的一些文档?真的很想理解,但似乎我理解得很糟糕......谢谢!
-
所以如果我不使用 await 关键字,日志将是一些未决的承诺,但使用它实际上会停止该行的代码并等待结果...
-
await暂停function的执行,直到它是await的结果被解析。 -
MDN 文档非常适合理解基本的 javascript 范例。在此处查看 await developer.mozilla.org/fr/docs/Web/JavaScript/Reference/… 并在此处查看与 Promises 的异步性 developer.mozilla.org/fr/docs/Web/JavaScript/Reference/…。
标签: javascript node.js async-await