node.js setTimeout循环问题

时间:2013-12-12 00:48:38

标签: node.js

我是node.js的新手。

我尝试创建一个执行数据库SELECT Query的setTimeout,并在处理SELECT结果完成后重复3秒。

  var newDBMessagesInterval = 3000;     // 3 Seconds
  (function newDBMessagesSchedule() {
    setTimeout(function() {
      dbNewMessagesQuery(function(dbResults,dbResultsLength) {

        console.log(dbResults);

        newDBMessagesSchedule();
      });
    }, newDBMessagesInterval)
  })();



function dbNewMessagesQuery(callback) {
  dbConnection.query("SELECT data1,data2,data3 FROM table WHERE condition=1;", function (dbError, dbResults, dbFields) {
    if(dbResults.length > 0) {
      callback(dbResults,dbResults.length);
    }
  });
  callback();
}

每次运行时,setTimeout循环次数似乎都会增加(例如:首先是一个console.log(dbResults),然后是2次,然后是4次等)。此外,我不确定它是否等待数据库SELECT完成,然后再尝试下一次处理。

寻找有关如何使用node.js

正确创建此循环的建议

THX

1 个答案:

答案 0 :(得分:2)

您的dbNewMessagesQuery来电callback两次。一次同步,并在db查询成功后执行一次。您应该在查询完成后调用一次。使用当前代码,对于每次调用newDBMessagesSchedule,您可以再排队两次以便稍后运行。

function dbNewMessagesQuery(callback) {
  dbConnection.query("SELECT data1,data2,data3 FROM table WHERE condition=1;", function (dbError, dbResults, dbFields) {
    callback(dbResults, dbResults.length);
  });
}

我还建议不要单独传递length,而是传递错误(如果有的话)。目前你只是假设永远不会有错误。

function dbNewMessagesQuery(callback) {
  dbConnection.query("SELECT data1,data2,data3 FROM table WHERE condition=1;", function (dbError, dbResults, dbFields) {
    callback(dbError, dbResults);
  });
}