【问题标题】:node.js get result from mysql querynode.js 从 mysql 查询中获取结果
【发布时间】:2017-07-11 11:06:31
【问题描述】:

为什么我不能得到结果?

var sql_data = connection.query(sql, function(error, results, fields) {
    if(error) {
        console.log(error);
            return;
    }
    var rows = JSON.parse(JSON.stringify(results[0]));
    console.log(rows);
});
console.log(rows);

首先 console.log 没问题,显示对象, 但第二个说:

ReferenceError: 行未定义

怎么了?..

【问题讨论】:

标签: mysql node.js


【解决方案1】:

您不应该像在代码的第一行中那样将异步函数分配给变量。您只需调用它并使用callback 方法(在本例中为function(error, results, fields))对结果执行操作。您的代码应如下所示

connection.query(sql, function(error, results, fields) {
    if(error) {
        console.log(error);
        return;
    }
    var rows = JSON.parse(JSON.stringify(results[0]));

    // here you can access rows
    console.log(rows);
});

// here it will be undefined
console.log(rows);

第二个console.log 中的rows 变量将未定义,因为它是在不同的范围内定义的。即使您在connection.query 之上执行var rows,它仍然是未定义的,因为您在异步函数的回调中分配了它的值。您需要详细了解此类操作。

【讨论】:

  • 但是如果我想在查询后使用结果......不可能吗?
  • 你不能。您必须对callback 中的结果执行所有操作,因此您的第一个console.log(rows) 就在哪里。
【解决方案2】:

如果你想得到查询结果,你应该使用 then Promise。我更喜欢它是一个。 Promise 运行命令 async。

function getDomain() {
    return result = await dbQuery('SELECT name FROM virtual_domains ORDER BY id;');
}

// * Important promise function
function dbQuery(databaseQuery) {
    return new Promise(data => {
        db.query(databaseQuery, function (error, result) { // change db->connection for your code
            if (error) {
                console.log(error);
                throw error;
            }
            try {
                console.log(result);

                data(result);

            } catch (error) {
                data({});
                throw error;
            }

        });
    });

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-11
    • 2013-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-25
    • 2019-01-02
    相关资源
    最近更新 更多