簡體   English   中英

node.js setTimeout循環問題

[英]node.js setTimeout Loop Issue

我是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正確創建此循環的一些建議

謝謝

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);
  });
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM