gpt4 book ai didi

javascript - 异步并等待 Node js中的MySQL调用

转载 作者:太空宇宙 更新时间:2023-11-03 11:29:07 26 4
gpt4 key购买 nike

我是 node 的新手,我刚刚了解了 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()

最佳答案

如果你想在测试中使用await关键字,你需要从异步函数displayDB返回一个promise,你需要先了解promises是如何工作的。伪代码:

var displayDB = () => {
return new Promise((resolve,reject)=>{
connection.query('SELECT * FROM products', (err, resp) => {
if (err) {
reject(err)
} else {
const table = [];
resp.forEach((product) => {
obj = {
'Product ID': product.productID,
'Category': product.category,
'Price': product.price,
'Stock': product.stockQuantity
}
table.push(obj)
})
resolve(table)
}
})
})
}


var test = async () => {
try{
console.table(await displayDB())
}catch(e){
console.log(e)
}
connection.end()
}
test()

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise

关于javascript - 异步并等待 Node js中的MySQL调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51473622/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com