javascript - 如何正确获取 promise 的返回值?

标签 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 打印行总是返回未定义。看起来 promise 在调用 if-else 语句后返回了值。

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

最佳答案

改变它以返回 promise

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

然后消费 promise

authProvider.isAuthenticated(data)
.then((result =>{
var isAuthenticated = result;
  console.log(isAuthenticated);
        if (isAuthenticated) {
            console.log("auth passed.");
            next();
        } else {
            var err = new Error(authenticationException);
            err.status = 403;
            next(err);
        }
}))

关于javascript - 如何正确获取 promise 的返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39761302/

相关文章:

javascript - 如何防止同站伪造?

javascript - 使用自定义事件模拟 domready 事件 (mootools)

javascript - 无法更新中间件策略中的 req.user?

node.js - 这个node.js代码中的process.env.UNIVERSAL是什么

mysql - Node、Express、MYSQL 从 MYSQL 检索 JSON

javascript - 同步调用,直到用户通过 Angular 身份验证为访客

javascript - 7 行,包含数组中的值

node.js - Socket.io 与 AJAX 用例

javascript - 使用 GitHub API 编辑提交消息并将其添加到文件

node.js - Jest 测试多个测试文件端口 3000 已被使用