在 javascript 中返回未解决的承诺 (async/await)

Returning an unresolved promise (async/await) in javascript

我希望有人能帮助我理解为什么以下代码无法正常工作。

Expense Data class 中,我有一个函数 listExpenses 应该只 return data 一旦承诺被解决或拒绝。

但是,当我实例化一个新的 expenseData 对象然后尝试记录费用列表时,我得到一个待处理的 Promise。我本以为 Promise 总是会在这个阶段得到解决。

class ExpenseData {
  constructor() {
    this.client = new Client({ database: 'expenses' })
  }

  async listExpenses() {
    await this.client.connect().catch(err => logAndExit(err));
    let data = await this.client.query("SELECT * FROM expenses ORDER BY created_on ASC")
                                .catch(err => logAndExit(err))
    return data;
  }
}
let expenseData = new ExpenseData(); 
let myData = expenseData.listExpenses();
console.log(myData);

下面是 运行 这段代码后我在控制台中得到的结果: Promise { <pending> }

您的方法是异步的,这意味着它会立即 returns 一个 Promise,该 Promise 将根据方法主体中发生的情况来解决或拒绝。

您需要这样做:

const func = async () => {
  let expenseData = new ExpenseData(); 
  let myData = await expenseData.listExpenses();
  console.log(myData);
};

func();

或者这样:

let expenseData = new ExpenseData(); 
expenseData.listExpenses().then((myData) => console.log(myData));