为什么我无法获得结果?
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:未定义行
出了什么问题?..
答案 0 :(得分:3)
如果要获取查询结果,则应使用 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;
}
});
});
}
答案 1 :(得分:2)
您不应该像在代码的第一行那样为变量分配异步函数。您只需使用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);
第二个rows
中的console.log
变量将是未定义的,因为它是在不同的范围内定义的。即使您在var rows
之上connection.query
,它仍然是未定义的,因为您在异步函数的回调中分配了它的值。您需要阅读有关此类操作的更多信息。