函数不会返回从MySQL查询创建的项目数组(异步/等待)

时间:2019-05-03 15:32:28

标签: mysql node.js async-await

我正在尝试通过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

1 个答案:

答案 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.queryawait不起作用,这是不必要的,因为dbconnection.query()函数不是Promise函数。

因此,rows的查询结果将在return items之后到达; 并且return ArrBuyPrice函数未运行。