【问题标题】:issue on .then and .catch关于 .then 和 .catch 的问题
【发布时间】:2021-06-17 06:19:37
【问题描述】:

是否可以触发 .then AND .catch ?

这是我的脚本:

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 和 catch 被触发。怎么可能?

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

【问题讨论】:

  • 如果findOne() 成功,您将进入.then() 回调。如果.then() 回调导致拒绝,您将进入下一个.catch()

标签: javascript passport.js


【解决方案1】:

如果findOnethen 中的任何内容抛出/拒绝,它们将调用链接的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() 中间件未使用

    我们通过 .then 并再次捕获,尽管 verify 为“true”且“if”也返回“true”。

    【讨论】:

      猜你喜欢
      • 2020-06-19
      • 2011-09-10
      • 2019-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多