我想要产生一个过程。但是,我得到错误:您可能只生成函数,promise,生成器,数组或对象,但传递了以下对象:" undefined"。
不确定原因。
Mongoose方法:
UserSchema.methods.comparePassword = function(candidatePassword, cb) {
bcrypt.compare(candidatePassword, this.password, function(err, isMatch) {
if (err){
return cb(err);
}
cb(null, isMatch);
});
};
用法:
yield user.comparePassword(this.request.body.password, function(err, isMatch) {
console.log(isMatch);
});
使用时发生错误。 user不为null或未定义。
答案 0 :(得分:3)
问题在于comparePassword
没有返回任何内容,这就是为什么你会收到有关undefined
的错误的原因。
我们假设你希望comparePassword
返回一个承诺。这意味着您需要使用promise来包装bcrypt.compare()
- 它使用回调 - 并返回该承诺:
UserSchema.methods.comparePassword = function(candidatePassword) {
var user = this;
return new Promise(function(resolve, reject) {
bcrypt.compare(candidatePassword, user.password, function(err, isMatch) {
if (err) return reject(err);
resolve(isMatch);
});
});
};
这就是您使用它的方式:
yield user.comparePassword(this.request.body.password); // no callback