我正在尝试编写一些代码,并且可以正常工作,但是我遇到了一个问题,其中bcrypt
使用了回调,并且我试图以承诺方式解决它。这是代码:
`UserSchema.statics.findByData = function(username,password) {
var User = this;
User.findOne({username}).then((user) => {
if(!user){
return Promise.reject();
}
return new Promise((resolve,reject) => {
bcrypt.compare(password,user.password,(err,res) => {
if(res){
resolve(user);
}else {
reject();
}
});
});
});
};`
我从这里调用此函数:
User.findByData(body.username,body.password).then((user) => {
res.send(user);
}).catch((e) => {
res.status(400).send();
});
我得到一个错误:无法读取未定义的属性'then'。
为什么我会收到此错误?
答案 0 :(得分:2)
如第一条评论所述,您需要返回User.findOne
,即promise
。因此,无需创建另一个promise
。每当您返回时,将使用返回的值调用then
。您也可以使用Promise.reject()
和Promise.resolve()
分别呼叫catch
和then
。
UserSchema.statics.findByData = function(username,password) {
var User = this;
return User.findOne({username}).then((user) => {
if(!user){
Promise.reject('No user found');
}
bcrypt.compare(password,user.password,(err,res) => {
if(res){
Promise.resolve(user);
}else {
Promise.reject(err);
}
});
});
};