mysql - 将数据存储在 MySQL block 中

标签 mysql node.js

 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/

相关文章:

node.js - Electron 无法在 Windows 10 上写入文件

node.js - 如何正确发送 swagger 客户端获取的参数和 header ?

php - 如何使用 NotORM lib 连接一对多表

php - PDO 没有这样的文件或目录 - 仅 ftp 服务器访问

php - 一个空行被插入到数据库中

node.js - 当找不到声明文件时如何使用模块

php - 如何在for循环中调用存储过程

mysql - AWS 微实例 - MySQL 在 WordPress 安装中不断失败

node.js - 将 Express.js 与 React.js 结合使用的推荐方式?

javascript - JsonWebToken错误: jwt must be provided