Передача значения в родительскую функцию с обратным вызовом - PullRequest
0 голосов
/ 07 октября 2018

Я бы хотел, чтобы функция 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 голосов
/ 07 октября 2018

Ошибка здесь, потому что 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);
});
0 голосов
/ 07 октября 2018

Вы не передали функцию обратного вызова в код.Делай как это

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);
}) );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...