2013-12-12 6 views
0

저는 node.js를 처음 사용합니다.node.js setTimeout 루프 문제

데이터베이스 SELECT 쿼리를 실행하고 SELECT 결과 처리가 완료된 후 3 초가 반복되는 setTimeout을 만들려고했습니다.

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 등). 또한 데이터베이스에서 기다리는 경우 다음 번에 처리를 시도하기 전에 완료해야하는지 확실하지 않습니다.

답변

2

귀하의 dbNewMessagesQuery 전화 callback 두 번 Node.js를

들으 제대로이 루프를 작성하는 방법에 대한 몇 가지 조언을 찾고. 일단 동 기적으로, 그리고 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); 
    }); 
}