我希望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() );
谢谢!
答案 0 :(得分:2)
存在错误是因为没有将cb
传递给该函数。应该提供它,然后将结果提供给依赖它的函数verifyEmail
:
emailExists(result => {
// depends on how verifyEmail works
verifyEmail(result);
});
错误也应该得到处理。可能会出现问题,因为req
和next
在emailExists
的范围内可能不可用(最好不要)。
首先不需要回调。猫鼬支持承诺,并且基于回调的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);
});
答案 1 :(得分:0)
您尚未将回调函数传递给代码。这样做
var emailExists = function(cb) {
User.findOne({ email: req.body.email }, (err, existingUser) => {
if (err) { return next(err); }
if (existingUser) {
cb(true);
} else {
cb(false);
}
});
}
//callback is a refrence of function .
verifyEmail( emailExists(function(status){
// do your operation here
Console.log('the output is '+status);
}) );