【发布时间】:2018-10-21 12:24:20
【问题描述】:
我有一些这样的代码:
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 闭包中的消息、状态等变量。我尝试过使用回调和解决我认为由于天真而不起作用的承诺。无论如何,任何解决方案都将不胜感激!
注意:我不想使用任何其他库来解决这个问题(我真的怀疑首先需要)
提前致谢!
【问题讨论】:
-
问题在于时机。
.save()异步操作并调用您最终提供的回调,将其从编写代码的顺序中推出。效果是let message在res.json()已经从中读取undefined之后被分配了一个值。 – 一个快速的解决方案是移动res.json(),使其位于.save()回调中。
标签: javascript mongoose mongoose-schema asynccallback