Node.js 回调和承诺:无法读取属性';然后';未定义的
我正试图编写一些代码,但我遇到了一个问题,Node.js 回调和承诺:无法读取属性';然后';未定义的,node.js,bcrypt,Node.js,Bcrypt,我正试图编写一些代码,但我遇到了一个问题,bcrypt使用回调,我正试图用承诺来解决它。代码如下: `UserSchema.statics.findByData = function(username,password) { var User = this; User.findOne({username}).then((user) => { if(!user){ return Promise.reject(); } r
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();
});
我得到一个错误:'cannotreadproperty'then'of undefined
为什么会出现此错误?如第一条评论中所述,您需要返回
User.findOne
,它将是promise
。因此,无需创建另一个承诺
。无论何时返回,都将使用返回值调用
。您可以使用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);
}
});
});
};
您没有从
findByData
返回任何内容,因此它是未定义的。。。