コードに (おそらくばかげた) 問題があります。私はこのようなものを持っています:
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];
});
}
});
}
私は基本的にデータベースの結果をリストにキャッシュし、データベースからすでに取得されている場合は直接(データベースクエリなしで)送信しようとしています。
私が抱えている問題は、割り当てlist[data.field_name] = results[results.length-1]
が機能しないことです。したがって、以前にデータを取得しようとしてlist[data.field_name]
初期化され[]
たが、後で割り当てられたデータが含まれていない場合。
明確にするために、データベースからデータを正常に取得し、データベースから初めて取得したときにクライアントに適切に送信します。問題が発生するのは、キャッシュされたコピーを送信しようとしたときです。キャッシュされたコピーがありません。
これはnodejs(およびmongodbクエリ)が非同期であることと関係があることは知っていますが、これを機能させる方法がわかりません。どんな助けでも大歓迎です。