[英]async and await on MySQL call in 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()
如果要在测试中使用await
关键字,则需要从异步函数displayDB
返回一个displayDB
,您需要学习Promise如何首先工作。 伪代码:
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
您的displayDB
函数中没有return
语句。
通常,这将导致函数返回undefined
,但是由于您将其声明为async
,因此它将导致其返回立即解决的Promise。
如果你想让它等待,直到该数据库查询完成,那么你就需要显式地返回一个new Promise
, 你 resolve
,当你准备(在调用之后即connection.end()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.