【问题标题】:Sequelizejs promises returns empty objectSequelizejs 承诺返回空对象
【发布时间】:2013-11-10 10:03:54
【问题描述】:

我正在使用 Sequelizejs,我尝试创建简单的用户验证函数

function ValidateIsUserLogged(sessionKeyInput) {
      var result = app.get('dbContext').user
        .find({
          where: {
            sessionKey: sessionKeyInput
          }
        })
        .then(function (user) {
          return user != null;
        }, function (error) {
          console.log(error);
        });

      return result;
}

in .then() 用户很好,它是同一个正确的对象,一切都很好,但我想得到承诺之外的结果。我已经尝试使用 .success().error() ,现在使用 .then() 结果(几乎)相同,我得到一个空对象,我无法从 promise 中的函数获得结果。我试图在 .then() 中设置一个变量,但结果是同一个变量不会更改其值或函数已经返回该值(在分配/更改值之前)。我知道这是异步方法,也许问题是关于一般的承诺,但我已经在这里停留了几天。任何帮助表示赞赏:)

【问题讨论】:

    标签: javascript node.js sequelize.js


    【解决方案1】:

    编写同步等效项:

    function validateIsUserLogged(sessionKeyInput) {
        try {
            var user = app.get('dbContext').user
                .find({
                    where: {
                        sessionKey: sessionKeyInput
                    }
                });
            }
        catch(error) {
            console.log(error);
        }
        return user != null;
    }
    

    修改它:

    function validateIsUserLogged(sessionKeyInput) {
        try {
            var user = app.get('dbContext').user
                .find({
                    where: {
                        sessionKey: sessionKeyInput
                    }
                });
            }
        catch(error) {
            console.log(error);
        }
        return user;
    }
    

    将上面的内容翻译回承诺:

    function validateIsUserLogged(sessionKeyInput) {
        return app.get('dbContext').user
        .find({
            where: {
                sessionKey: sessionKeyInput
            }
        }).then(function(user) {
            //This is pointless but I have no idea what you want to do
            return user;
        }, function(error) {
            console.log(error);
        });
    }
    

    【讨论】:

    • 我尝试查看会话密钥是否有效 -> 所以如果我找到一个不为空的用户,我将其返回为真;在您的方法中,我再次遇到空对象问题
    • @Daemonyoyo 我没有解决方案,但提示如果您编写代码时就好像它是同步的并解决了问题,那么可以直接将其转换为基于 Promise 的代码
    猜你喜欢
    • 1970-01-01
    • 2014-10-05
    • 1970-01-01
    • 2020-03-03
    • 2020-01-04
    • 2018-08-24
    • 1970-01-01
    • 2015-11-04
    • 1970-01-01
    相关资源
    最近更新 更多