【问题标题】:Returning an unresolved promise (async/await) in javascript在javascript中返回一个未解决的promise(async/await)
【发布时间】:2021-12-28 15:53:24
【问题描述】:

我希望有人能帮助我理解为什么下面的代码不能正常工作。

在Expense Data 类中,我有一个函数listExpenses,它应该只在promise 被解决或被拒绝后才返回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> }

【问题讨论】:

标签: javascript async-await promise es6-promise


【解决方案1】:

您的方法是异步的,这意味着它会立即返回一个 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));

【讨论】:

  • 啊,是的,你是对的。刚刚尝试了第一种方法,它奏效了。有道理——谢谢!
  • 很高兴为您提供帮助。不要犹豫,将此标记为正确答案。祝你好运!
猜你喜欢
  • 2020-07-18
  • 1970-01-01
  • 2017-09-11
  • 2022-08-22
  • 2019-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多