sql - 如何等待异步完成 - NodeJs

标签 sql node.js asynchronous

我正在使用异步来执行第二个数据库查询。该查询的结果必须作为对象添加到第一个查询中。

问题是,当异步完成时,数据没有改变,因为他已经发送了未更改的数据。有没有办法等待异步完成?

我使用了超时,但数据的大小未知,因此这不是一个好的解决方案。

到目前为止的代码:

connection.query('SELECT * FROM SENSORS', function(err,rows) {
   if(rows.length !== 0) {
    DEBUG_WRITE('sensor/','GET',200);
    async.eachSeries(rows, function(row, callback) {
     connection.query('SELECT * FROM LOCATIONS WHERE LocationID=?',row.LocationID, function (error, result) {
        row.location = result; 
            callback(null,rows);
        });
    });
    res.status(200);
    res.send(rows);
   } else {
       DEBUG_WRITE('sensor','GET',404);
       res.status(404);
       res.send({status: "No entries found"});
   }
});

最佳答案

eachSeries 采用的函数基本上是“我完成了”函数:

connection.query('SELECT * FROM SENSORS', function(err,rows) {
   if(rows.length !== 0) {
    DEBUG_WRITE('sensor/','GET',200);

    async.eachSeries(rows, function(row, callback) {
     connection.query('SELECT * FROM LOCATIONS WHERE LocationID=?',row.LocationID, function (error, result) {
        row.location = result; 
            callback(null,rows);
        });
    }, function(err){ //treat this as "i'm done iterating"

       // if any of the iterations produced an error, err will equal that error
      if(err) {
        //do something with the error
        res.status(500);
        return res.send(err);
      }

      res.status(200);
      return res.send(rows);
    });
   } else {
       DEBUG_WRITE('sensor','GET',404);
       res.status(404);
       res.send({status: "No entries found"});
   }
});

See here - 它与each相同,因此功能是相同的

关于sql - 如何等待异步完成 - NodeJs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44264240/

相关文章:

Python gevent+瓶子。查询 API。如何使用gevent防止超时锁?

mysql - 使用内连接语句创建 sql View

javascript - 异步 Javascript 调用 - 等待请求,如果在 x 时间内到达,则立即执行,否则跳过

javascript - 为什么 Safari 发送错误的 cookie 值?

node.js - N|Solid Runtime 是否通过粘性 session 负载平衡 Websocket?

node.js - 了解回调

asynchronous - 如何在 Java 中实现回调

java - JDBC 无法登录 LocalDB 实例,但在 SSMS 中我可以登录

mysql - 多对多关系还是谬误?

sql - 使用表名称作为参数调用过程,并将与 PL/SQL 中的表相同的数据类型分配给变量