我希望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);
});

还应处理错误。可能会出现问题,因为reqnext可能不在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);
});

10-06 15:57