通过回调将值传递给父函数

时间:2018-10-07 10:31:01

标签: javascript node.js function asynchronous

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

谢谢!

2 个答案:

答案 0 :(得分:2)

存在错误是因为没有将cb传递给该函数。应该提供它,然后将结果提供给依赖它的函数verifyEmail

emailExists(result => {
  // depends on how verifyEmail works
  verifyEmail(result);
});

错误也应该得到处理。可能会出现问题,因为reqnextemailExists的范围内可能不可用(最好不要)。

首先不需要回调。猫鼬支持承诺,并且基于回调的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);
}) );