我正在尝试通过MySQL查询创建一系列商品,以从异步函数中返回,但是返回为空。
我尝试过的事情:
这是针对新的Web服务(nodejs)的,该服务需要初始化MySQL数据库中的值,然后快速访问这些值以将其与从Internet提取的值进行比较。为了限制数据库调用的数量,我计划将值存储在数组中(内存中),并且只要它们发生足够的更改(基于计算),就将它们写入数据库。
所有操作都是基于Linux的,使用Node 11
start_row = 1
start_column = 5
end_row = 10
end_column = 5
Set start_cell = Application.ThisWorkbook.Sheets(1).Cells(start_row, start_column)
Set end_cell = Application.ThisWorkbook.Sheets(1).Cells(end_row, end_column)
Set my_range = Application.ThisWorkbook.Sheets(1).Range(start_cell, end_cell)
我希望require('dotenv').config()
var mysql = require('mysql')
var dbconnection = mysql.createConnection({
host: 'localhost',
user: process.env.MYSQL_USER,
password: process.env.MYSQL_PW,
database: process.env.MYSQL_DB
})
dbconnection.connect(function (err) {
if (err) {
console.error('error connecting: ' + err.stack)
}
})
async function ReadDB () {
var ArrBuyPrice = []
var query = 'SELECT * FROM pricing'
var items = await dbconnection.query(query, function (err, rows, result) {
if (err) throw err
for (var i in rows) {
ArrBuyPrice.push(rows[i].price_buy.toFixed(8))
}
return ArrBuyPrice
})
return items
}
async function InitialProcess () {
var DbResult = await ReadDB()
console.log(DbResult)
}
InitialProcess()
的输出为console.log
答案 0 :(得分:0)
// https://stackoverflow.com/questions/44004418
var mysql = require('mysql')
var dbconnection = mysql.createConnection({
host: 'localhost',
user: process.env.MYSQL_USER,
password: process.env.MYSQL_PW,
database: process.env.MYSQL_DB
})
const util = require('util');
async function ReadDB() {
var ArrBuyPrice = []
const query = util.promisify(dbconnection.query).bind(dbconnection);
try {
const rows = await query('select * from pricing');
for (var i in rows) {
ArrBuyPrice.push(rows[i].price_buy.toFixed(8))
}
return ArrBuyPrice;
} catch (error) {
console.log(error)
return [];
} finally {
dbconnection.end();
}
}
async function InitialProcess() {
var DbResult = await ReadDB()
console.log(DbResult)
}
InitialProcess();
什么是问题:
async function ReadDB() {
var ArrBuyPrice = []
var query = 'SELECT * FROM pricing';
var items = await dbconnection.query(query, function (err, rows, result) {
if (err) throw err
for (var i in rows) {
ArrBuyPrice.push(rows[i].price_buy.toFixed(8))
}
return ArrBuyPrice
});
return items
}
在await dbconnection.query
,await
不起作用,这是不必要的,因为dbconnection.query()
函数不是Promise
函数。
因此,rows
的查询结果将在return items
之后到达;
并且return ArrBuyPrice
函数未运行。