我正在尝试编写一些代码并且它可以工作,但我遇到了bcrypt
使用回调的问题,我正在尝试用promise来解决它。这是代码:
`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();
});
我收到一个错误:`无法读取属性'然后'未定义。
为什么我收到此错误?
如第一条评论中所述,您需要返回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);
}
});
});
};