在mysql块中存储数据

y0u0uwnf  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(312)
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);
 }

js首先执行外部控制台日志,然后执行内部日志。结果我没有得到正确的结果。
但是我想先执行sql查询,然后根据结果继续。

zqry0prt

zqry0prt1#

请记住,node.js是异步的,这意味着如果使用同步(阻塞)代码,代码将无序运行,这与您的预期相反。
如果你需要 num_row 递增并可靠地返回,您必须将其与以下其中一个链接在一起:回调、尾随 then 或使用 async / await .
我鼓励你用承诺:

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 / await native 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);
 }

相关问题