如何构建功能回报承诺

时间:2018-01-04 18:12:45

标签: javascript function promise

我试图从validateKey返回一个真/假值,但是在解决这个承诺时遇到了问题。我试过return new Promise,但有点卡住了。

server.js

app.get("/node/api/mssql/test", function(req, res) {
  console.log(session.validateKey(req)) // logs: Promise { <pending> }, would like to log: true or false
})

session.js

exports.validateKey = function(req) {
  return sql.connect(config.properties)
    .then(pool => {
      return pool.request()
        .query("SELECT CASE WHEN EXISTS (SELECT * FROM Login WHERE (username = '" + req.header("username") + "' AND apiKey = '" + req.header("apiKey") + "')) THEN CAST(1 AS BIT) ELSE CAST(0 AS BIT) END")
        .then(response => {
          console.log(response[0]['']) // returns true / false
          return response[0][''] // return nested value to get true / false response
        })
   })
}

如何从validateKey返回包含response[0]['']结果的承诺?

2 个答案:

答案 0 :(得分:1)

您的函数validateKey已经返回一个promise。问题是你如何使用它。

session.validateKey(req).then((validation) => {
  console.log(validation) //true or false

  //if you want to return this value
  return res.send({result: validation});
});

答案 1 :(得分:0)

只需使用异步中间件:

app.get("/node/api/mssql/test", async function(req, res) {
 const isValid = await session.validateKey(req));
 console.log(isValid);
 res.end(isValid ? "Logged in!" : "Failed");
})