如何正确获取承诺返回的值?

时间:2016-09-29 04:15:01

标签: javascript node.js express promise

我正在使用nodejs + Express作为我的后端服务。

我有一个authenHandler.js文件来帮助使用sequelize进行身份验证:

module.exports = {
  isAuthenticated: function(data) {
    models.Users.find(data)
      .then(function(user) {
        if (user) {
          return true;
        } else {
          return false;
        }
      });
  }
}

当我在app.js中使用这个辅助函数时:

app.use(function(req, res, next) {
        // process to retrieve data
        var isAuthenticated = authProvider.isAuthenticated(data);
        console.log(isAuthenticated);
        if (isAuthenticated) {
            console.log("auth passed.");
            next();
        } else {
            var err = new Error(authenticationException);
            err.status = 403;
            next(err);
        }
    }
})

这总是转到else语句,因为isAuthenticated打印行始终返回undefined。看起来,在调用if-else语句之后,promise返回了值。

我不确定如何连接authenHandler.js和app.js.最好的方法是什么?

2 个答案:

答案 0 :(得分:1)

更改它以返回承诺

rbenv rehash

然后消费承诺

isAuthenticated: function(data) {
    return models.Users.find(data)
      .then(function(user) {
        if (user) {
          return true;
        } else {
          return false;
        }
      });
  }

答案 1 :(得分:1)

你的app.js错了,isAuthenticated返回promise不返回bool

你需要像这样修改app.js

app.use(function(req, res, next) {

        // process to retrieve data
        authProvider.isAuthenticated(data)
          .then(function(isAuthenticated) {
            if (isAuthenticated) {
              console.log("auth passed.");
              next();
            }
            else {
              var err = new Error(authenticationException);
              err.status = 403;
              next(err);
            }
          });
    }
})