簡體   English   中英

Promise等待返回等待

[英]Promise with await returning pending

我閱讀了如何從異步調用返回響應? . 我仍然有點困惑為什么這段代碼不能正常工作。 bool 正在返回“Promise {pending}”,它不應該返回,因為我已經將 await 關鍵字放在那里。

數據庫.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;
}

async函數總是返回 promise。因此,如果您嘗試記錄validateUser的返回值,它會給您一個Promise

您從async function 返回的任何非承諾值都隱式包裝在Promise中。

您可以將 .then .then() function 鏈接到async function 調用以獲取已解析的值。

validateUser(username, password)
  .then(value => console.log(value))
  .catch(error => console.log(error));

查看您的代碼,您似乎根本不需要async function。 您可以將validateUser設置為常規 function,然后僅從validateUser function 返回 promise。

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的 Promise。如果是,您可以只使用async-await語法而不是使用回調版本來查詢數據庫並將其包裝在Promise構造函數中。

您還需要await validateUser(...) 否則你會得到最終會解決的 promise 。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM