2013-12-11 115 views
0

我是node.js的新手。Node.js異步循環查詢數據庫

我正在構建一個循環,每隔3秒用聊天消息查詢數據庫,然後將所需的新消息發送給所需用戶。

這是環我 - 但目前它只是循環一次:

// New Database Chat Messages Send 
    var newDBMessagesInterval = 3000;  // 3 Seconds 
    (function newDBMessagesSchedule() { 
    setTimeout(function() { 
     async(function() { 
     console.log('async is done!'); 
     newDBMessagesSchedule(); 
     }); 
    }, newDBMessagesInterval) 
    })(); 





function async() { 
    console.log('in async function....'); 
} 

我需要從異步函數返回的東西循環繼續?

此外,這是一個好/壞的方式做一個循環 - 我的目的是把數據庫選擇放入異步函數,而不是數據庫調用重疊。

也是這個非阻塞?

thx

+0

我不知道你的情況如何,但我認爲你可能會以錯誤的方式解決你的問題。這聽起來像你應該真的使用socketIO http://socket.io/它將刪除查詢數據庫的新消息的必要性,並將實時。 – EmptyArsenal

+0

我正在使用socket.io ...但我的連接分佈在幾臺服務器上,所以我需要查詢數據庫並響應所需的套接字...(例如:它們不會全部終止在同一臺服務器上... – Adam

回答

4

關於異步函數沒有什麼神奇的。您必須在某個時刻將回調調用到異步函數。出於測試目的,您應該將async更改爲:

function async(callback) { 
    callback(); 
} 

是的,這是非阻塞的。

但是,從您的評論中,我看到您正在這樣做將消息發送到套接字。這不是一個很好的方法來做到這一點。您應該考慮獲取「pub/sub」系統,並讓每臺服務器訂閱併發布自己的消息。 Redis是一個很好的選擇。

+0

thx - 這是有效的 - 我的知識正在慢慢增長...讚賞。 – Adam

+0

@Adam請看我編輯的內容。我想你可以用我建議的pub/sub系統更輕鬆一點。 –