0
我的代碼有一個(可能是啞巴)問題。我有這樣的事情:在nodejs中存儲數據庫查詢(使用socket.io)
io.sockets.on('connection', function(socket)
{
var list = {};
socket.on('event', function(data){
if(!list[data.field_name]){
list[data.field_name] = [];
// db and collection already defined
var collection = new mongodb.Collection(db, coll);
collection.find({
field: data.field_name,
}).toArray(function(err, results){
list[data.field_name] = results[results.length-1];
socket.emit('another-event',{
list:list[data.field_name];
});
});
} else {
socket.emit('another-event',{
list:list[data.field_name];
});
}
});
}
基本上,我想緩存在列表中的DB的結果,並直接發送(不分貝查詢),如果它已經從數據庫中檢索較早。
我遇到的問題是,作業list[data.field_name] = results[results.length-1]
不起作用。因此,如果之前嘗試檢索數據,則list[data.field_name]
已初始化爲[]
,但它不包含之後分配給它的數據。
要清楚的是,它確實從數據庫中檢索數據,並在從數據庫檢索到數據時第一次將數據發送到客戶端。當我嘗試發送問題出現的緩存副本時 - 沒有緩存副本。
我知道這是與nodejs(和mongodb查詢)是異步的,但我似乎無法弄清楚如何使這項工作。任何幫助將不勝感激。
對不起,壞。我實際上是這樣做的,我在問題中輸入了錯誤的代碼。它仍然不起作用。 – 2012-08-03 21:27:40
您是否確定*您所顯示的代碼正好*您正在運行的代碼?不要將代碼重新輸入問題;請將其複製並粘貼。否則,你會冒着輸入你認爲你的代碼是什麼的風險,而不是它實際是什麼,它可以隱藏錯誤。 – ebohlman 2012-08-04 04:44:30
是的,我很確定 – 2012-08-12 07:29:55