我希望emailExists()函数在调用时返回true或false,得到的错误是:
TypeError: cb is not a function
异步和回调对我来说都是很新的,我确信我犯了一个新手错误。我已经模仿了另一个stackoverflow对类似问题的回答,从我所知,它应该是有效的。
这是我的代码:
var emailExists = function(cb) {
User.findOne({ email: req.body.email }, (err, existingUser) => {
if (err) { return next(err); }
if (existingUser) {
cb(true);
} else {
cb(false);
}
});
}
verifyEmail( emailExists() );
谢谢!
最佳答案
错误是因为没有向函数传递cb
。应该提供它,然后将结果提供给依赖它的函数,verifyEmail
:
emailExists(result => {
// depends on how verifyEmail works
verifyEmail(result);
});
还应处理错误。可能会出现问题,因为
req
和next
可能不在emailExists
的范围内(最好不在)。首先不需要回调。Mongoose支持承诺,而基于回调的API是遗留的。
应该是:
var emailExists = function(email ) {
return User.findOne({ email })
.then(existingUser => !!existingUser);
}
并且可以在错误得到一致处理的情况下使用:
emailExists(req.body.email)
.then(result => {
// depends on how verifyEmail works
verifyEmail(result);
})
.catch(err => {
next(err);
});