我对node还很陌生,刚刚了解了javascript中提供的async和await函数。我正试图在下面所附的代码段中实现这个方法。根据我的理解,数据库响应应该首先打印到控制台,然后打印“done”,但我无法让它工作。任何帮助都将不胜感激。
请解释一下你是怎么做的,因为我想知道我做错了什么。
var mysql = require("mysql");
const cTable = require('console.table');
var connection = mysql.createConnection({
host: "localhost",
port: 8889,
user: "root",
password: "root",
database: "testDB"
})
connection.connect((err, fields) => {
if (err) {
return console.log(err.code);
}
});
var displayDB = async () => {
connection.query('SELECT * FROM products', (err, resp) => {
if (err) {
return console.log(err.code);
} else {
table = [];
resp.forEach((product) => {
obj = {
'Product ID': product.productID,
'Category': product.category,
'Price': product.price,
'Stock': product.stockQuantity
}
table.push(obj)
})
console.table(table)
connection.end()
}
})
}
var test = async () => {
var x = await displayDB()
console.log('done')
}
test()
2条答案
按热度按时间3npbholx1#
您需要从异步函数返回一个承诺
displayDB
如果你想使用await
关键词在测试中,你需要先了解承诺是如何工作的。伪代码:https://developer.mozilla.org/en-us/docs/web/javascript/reference/global_objects/promise
hm2xizp92#
你没有
return
你的声明displayDB
功能。通常这会导致函数返回
undefined
但因为你宣布了async
,它使它返回一个立即解决的承诺。如果希望它等到数据库查询完成,则需要显式返回
new Promise
你呢resolve
当你准备好了(即你打过电话之后connection.end()
).