【发布时间】:2018-12-30 14:24:40
【问题描述】:
我对 node 还是很陌生,我刚刚了解了 javascript 中提供的 async 和 await 函数。我正在尝试在下面附加的代码 sn-p 中实现此方法。据我了解,数据库响应应该首先打印到控制台,然后是“完成”,但我无法让它工作。任何帮助将不胜感激。
还请尝试解释您为修复它所做的工作,因为我想了解我做错了什么。
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()
【问题讨论】:
-
除非
connection.query返回一个承诺,否则这是行不通的。我有一段时间没看了,但我认为 MySQL 节点模块没有。因此,您需要将其包装在一个承诺中并从函数中返回该承诺。 -
@MarkMeyer — 即使
connection.query确实返回了一个promise,它也不起作用,因为connection.query的返回值在displayDB中被忽略了。
标签: javascript mysql node.js