在 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));
我希望有人能帮助我理解为什么以下代码无法正常工作。
在 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));