Javascript 等待返回等待的承诺

Javascript 等待返回等待的承诺,javascript,node.js,Javascript,Node.js,我读了他的答案。我仍然有点困惑为什么这段代码不能正常工作。 bool正在返回Promise{pending},它不应该返回,因为我已经在那里放置了wait关键字 db.js: async function validateUser(username, password) { var sql = "SELECT * FROM users WHERE username = ? AND password = ?"; var values = [username, passw

我读了他的答案。我仍然有点困惑为什么这段代码不能正常工作。 bool正在返回Promise{pending},它不应该返回,因为我已经在那里放置了wait关键字

db.js:

async function validateUser(username, password) {
  var sql = "SELECT * FROM users WHERE username = ? AND password = ?";
  var values = [username, password];

  let promise = new Promise((resolve, reject) => {
    con.query(sql,values, function(err, results) {
      if (err) throw err;
      if (results.length > 0){
        console.log('true');
        resolve("true");
      }
      else{
        console.log('false');
        reject("false");
      }
    }) 
  });
  let bool = await promise; // wait until the promise resolves (*)
  return bool;
}
你还需要等待尤瑟。。。;否则,你将得到最终解决的承诺。

你还需要等待validateUser。。。;否则,您将得到最终解决的承诺。

异步函数总是返回承诺。因此,如果您尝试记录validateUser的返回值,它将给您一个承诺

从异步函数返回的任何非承诺值都隐式包装在承诺中

您可以将.then函数链接到异步函数调用以获得解析值

validateUser(username, password)
  .then(value => console.log(value))
  .catch(error => console.log(error));
看看您的代码,似乎根本不需要异步函数。您可以使validateUser成为常规函数,只需从validateUser函数返回一个承诺

function validateUser(username, password) {
  var sql = "SELECT * FROM users WHERE username = ? AND password = ?";
  var values = [username, password];

  return new Promise((resolve, reject) => {
    con.query(sql,values, function(err, results) {
      if (err) reject(err);

      if (results.length > 0) resolve("true");
      else reject("false");
    }) 
  });
}
您还可以检查正在使用的数据库库是否提供了基于Promise的API。如果有,您可以使用async Wait语法,而不是使用回调版本来查询数据库,并将其包装到承诺构造函数中。

异步函数总是返回承诺。因此,如果您尝试记录validateUser的返回值,它将给您一个承诺

从异步函数返回的任何非承诺值都隐式包装在承诺中

您可以将.then函数链接到异步函数调用以获得解析值

validateUser(username, password)
  .then(value => console.log(value))
  .catch(error => console.log(error));
看看您的代码,似乎根本不需要异步函数。您可以使validateUser成为常规函数,只需从validateUser函数返回一个承诺

function validateUser(username, password) {
  var sql = "SELECT * FROM users WHERE username = ? AND password = ?";
  var values = [username, password];

  return new Promise((resolve, reject) => {
    con.query(sql,values, function(err, results) {
      if (err) reject(err);

      if (results.length > 0) resolve("true");
      else reject("false");
    }) 
  });
}
您还可以检查正在使用的数据库库是否提供了基于Promise的API。如果有,您可以使用async Wait语法,而不是使用回调版本来查询数据库,并将其包装到Promise构造函数中。

bool绝对不是Promise。但是,异步函数调用validateUser…将返回一个将来返回布尔值的承诺。相反,您需要将wait放在实际希望使用承诺结果的调用上。不要使用throw err,而是rejecterr!还有,那是什么数据库库?你可能根本不需要新的承诺包装。bool绝对不是承诺。但是,异步函数调用validateUser…将返回一个将来返回布尔值的承诺。相反,您需要将wait放在实际希望使用承诺结果的调用上。不要使用throw err,而是rejecterr!还有,那是什么数据库库?您可能根本不需要新的Promise包装器。