Bluebird promise resolve 被捕获为错误

Bluebird promise resolve is being caught as an error

我正在使用对 return 用户数据的承诺,对他们进行身份验证,我的决心显示在我的 .catch 中以供我调用。

调用登录函数;

 function(req, username, password, done) {
        user.login(username, password).then( function(err, results){
            if (err) throw err;

            done(null, results.user);

        }).catch(
            function(err){
                console.log("Failed to log in", err);
                done(null, false);
            }
        );
}

这是承诺代码:

exports.login = function(username, password){
return new promise(function(resolve, reject){
    var sql = `CALL LOGIN(?)`;
    db.conn.query(sql, username, (err, results, fields) => {
            if (err) {
              reject("SQL ERR:", err);
            }

            var user = results[0][0];
            if (!user.uID) {
                reject("Incorrect username");
            }

            if(bcrypt.compareSync(password, user.pword)){
                resolve(user);
            } else {
                reject('Incorrect password');
            }

        });
});
}

当调用它时,用户对象被作为错误抛出,即使它是在 resolve 上调用的...我目前被卡住了,我试图重新安装 bluebird 模块,以防它发生问题.

接下来的事情是这样的:

如果一切正常,您将在此处将用户对象作为参数传递

if (bcrypt.compareSync(password, user.pword)) {
  resolve(user);
} else {
  reject('Incorrect password');
}

因此,在代码的这一部分 .then 中,您接收到一个用户对象作为唯一参数,因此没有必要检查是否存在错误。

function (req, username, password, done) {
  user.login(username, password).then(function(user) {
    // a good way to see all arguments is
    // console.log(arguments);
    done(null, user);
  }).catch(
    function(err) {
      console.log("Failed to log in", err);
      done(null, false);
    }
 );
}