我是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
答案 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);
});
}