вопрос на .потом и .лови

#javascript #passport.js

Вопрос:

Возможно ли это вызвать .тогда И … поймаешь ?

вот мой сценарий :

 passport.use(new BasicStrategy( (username, password, callback) => {
    User.findOne({where: { username: username }})
      .then(function (data) {
        if(data === null) { 
          console.log("then.false"); 
          callback(null, false);};
          var verify = data.verifyPassword(password);
          if(verify === true) { 
            console.log("then.data "  data); 
            callback(null, data); 
          } 
          callback(null, false);
        })
      .catch( err => {
        console.log('catch  '  err);
        callback(null, false);
      })
  })
);
 

и вот моя консоль, как мы можем видеть, тогда и сработает. Как это возможно ?

 then.data [object SequelizeInstance:user]
catch  Error: passport.initialize() middleware not in use
 

Комментарии:

1. Если findOne() это удастся, вы перейдете к .then() обратному вызову. Если .then() обратный вызов приведет к отклонению, вы перейдете к следующему .catch()

Ответ №1:

Если findOne или что-то внутри then бросков/отклонений, они вызовут цепочку catch . Скорее всего, один из двух ваших callback() вызовов выдает ошибку.

Ответ №2:

спасибо за вашу помощь. Я изменил код следующим образом :

 passport.use(new BasicStrategy( (username, password, callback) => {
User.findOne({where: { username: username }})
  .then(function (data) {
    var verify = data.verifyPassword(password);
    if(verify == true) { console.log("VERIFY = "   verify); callback(null, data); } 
       }
  )
  .catch( err => {
    console.log('catch  '  err);
    callback(null, false);
    }
  )
  }
  ));
 

Мой консольный результат таков :

ПРОВЕРКА = истинная ошибка перехвата: passport.initialize() промежуточное программное обеспечение не используется

Мы закончили .затем И поймайте снова, несмотря на «истину» от проверки и «если», возвращающее » истину тоже.