我对节点还很陌生,我刚刚了解了javascript中提供的async和await函数。我正在尝试在下面随附的代码段中实现此方法。以我的理解,数据库响应应该首先打印到控制台,然后“完成”,但是我无法使其正常工作。任何帮助将不胜感激。
也请尝试说明您所做的修复操作,因为我想了解我做错了什么。
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()
您return的displayDB函数中没有语句。
return
displayDB
通常,这将导致函数返回undefined,但是由于您声明了它async,因此它导致其返回 立即 解决的Promise 。
undefined
async
如果你想让它等待,直到该数据库查询完成,那么你需要 明确地 返回new Promise该 你 resolve当你准备好了(你叫后connection.end())。
new Promise
resolve
connection.end()