Bluebird promise resolve被捕获为错误

时间:2018-01-27 17:28:16

标签: node.js bluebird

我正在使用promises为用户返回数据进行身份验证,我的解决方案显示在我的.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');
            }

        });
});
}

当调用它时,即使在解析时调用了用户对象也是一个错误...我目前卡住了,我试图重新安装bluebird模块以及它发生的事情。< / p>

1 个答案:

答案 0 :(得分:1)

接下来发生了什么:

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

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);
    }
 );
}