function liveFeed_update() {
var symbol_in_table = "SELECT count (*) as total FROM livedata
wherescript_name = '"+s_symbol_script+"'";
con.query(symbol_in_table, function (err, result) {
if (err) {
throw err;
}
else {
num_row = + result[0].total;
console.log("Number of Rows in inner level:",+ num_row);
}
});
console.log("Number of Rows in outer level:",+ num_row);
}
Node.js 首先执行外部控制台日志,然后再执行内部。结果我没有得到正确的结果。
但是我想先执行sql查询,然后根据结果我想进一步进行。
最佳答案
请记住,Node.js 是异步,这意味着代码将无序运行,这与您用于同步(阻塞)代码的预期相反。
如果您需要使 num_row
递增并可靠地返回,您必须将其与以下之一链接在一起:回调、尾随 then
或使用 异步
/等待
。
我鼓励您使用 Promise:
function liveFeed_update() {
var symbol_in_table = "...";
var num_row = 0;
con.query(symbol_in_table).then(function(results) {
results.forEach(function(result) {
num_row = + result[0].total;
console.log("Number of Rows in inner level:", num_row);
});
}).then(function() {
console.log("Number of Rows in outer level:",+ num_row);
});
}
同样的事情也可以通过回调来完成,但是这会变得很棘手,通常取决于 async图书馆。
如果您可以使用 async
/await
原生 Node.js 功能,那就更容易了,让您的异步代码感觉更像传统的同步代码:
async function liveFeed_update() {
var symbol_in_table = "...";
var num_row = 0;
var results = await con.query(symbol_in_table);
results.forEach(function(result) {
num_row = + result[0].total;
console.log("Number of Rows in inner level:", num_row);
});
console.log("Number of Rows in outer level:",+ num_row);
}
关于mysql - 将数据存储在 MySQL block 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51868629/