为什么我得不到结果?
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);
Run Code Online (Sandbox Code Playgroud)
第一个 console.log 没问题,显示对象,但第二个说:
参考错误:行未定义
怎么了?..
您不应该像在代码的第一行中那样将异步函数分配给变量。您只需调用它并使用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);
Run Code Online (Sandbox Code Playgroud)
所述rows在第二可变console.log,因为它在不同的范围内定义是不确定的。即使你会在var rows之上做connection.query,它仍然是未定义的,因为你在异步函数的回调中分配了它的值。您需要阅读有关此类操作的更多信息。
如果你想得到查询结果,你应该使用then Promise 。我更喜欢它是一个。Promise 异步运行命令。
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;
}
});
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19467 次 |
| 最近记录: |