私はこれをあきらめます。賢明なスタックオーバーフロー修道士の何人かが私のバグを修正してくれませんか?
コードは自明です。クライアントはルーム名を送信し、サーバーは redis 検索を行い、有効なルームをアレイにプッシュします。すべての部屋を追加した後、リストをクライアントに送信する必要があります。
問題は閉鎖、非同期などに基づいています。私は問題を理解していますが、配列を関数内に残す必要があるため、回避策を得ることができません。トリッキー。
コード:
function roomList(socket){
var roomlist = [], rooms = getRooms(), p = /pChannel_/;
redis.select(7, function(err,res){
for (var k in rooms){
if(rooms[k] != '' && p.test(rooms[k])){
var key = 'channel:'+rooms[k];
redis.hgetall(key, function (err, reply) {
if(reply){
var c = io.sockets.manager.rooms[rooms[k]];
roomlist.push( Array(reply['name'],c.length,reply['icon']) );
}
else { console.log('nothing found'); }
});
}
}
// here be dragons
console.log(roomlist);
socket.emit('roomList', roomlist);
});
}
ありがとう。