[英]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.