一尘不染

在节点js中异步并等待MySQL调用

node.js

我对节点还很陌生,我刚刚了解了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()

阅读 242

收藏
2020-07-07

共1个答案

一尘不染

returndisplayDB函数中没有语句。

通常,这将导致函数返回undefined,但是由于您声明了它async,因此它导致其返回 立即 解决的Promise 。

如果你想让它等待,直到该数据库查询完成,那么你需要 明确地 返回new Promise
resolve当你准备好了(你叫后connection.end())。

2020-07-07