javascript - 在 mongoose schema.save 中更新 `let` 变量
问题描述
我有一些这样的代码:
let addUser = (req, res) => {
let user;
let message = "";
let status = 200;
bcrypt.hash(password, salt_rounds, (err, hash) => {
user = new user({
...
password: hash,
});
user.save(err => {
if(err) {
message = "No success";
status = 400;
} else {
message = "success";
}
});
res.status(status).json({
message: message,
});
});
};
但是,在message
发送响应时该变量是未定义的。我一直在寻找一段时间,不幸的是,一直无法找到与此问题类似的解决方案。
最终,我想要的是能够更新bcrypt
/.save
闭包中的消息、状态等变量。我尝试过使用回调和解决我认为由于天真而不起作用的承诺。无论如何,任何解决方案将不胜感激!
注意:我不想使用任何其他库来解决这个问题(我真的怀疑首先需要)
提前致谢!
解决方案
更改user.save
为返回 Promise 的内容,然后调用.then
该 Promise:
let addUser = (req, res) => {
let user;
let status = 200;
bcrypt.hash(password, salt_rounds, (err, hash) => {
user = new user({
password: hash,
});
const savePromise = new Promise((resolve, reject) => {
user.save(err => {
if (err) {
status = 400;
reject("No success");
} else {
resolve("success");
}
});
});
savePromise.then(message =>
res.status(status).json({ message })
).catch(message =>
res.status(status).json({ message })
);
});
};