Tag: 闭包

JS闭包,Redis,循环,asynchronous::空数组

我放弃了这一点。 可能一些明智的stackoverflow僧侣请修复我的错误? 代码是自我解释。 客户端发送房间名称,服务器执行redis查找并将有效房间推送到arrays。 在添加所有房间之后,该列表应该被发射到客户端。 问题是closures,asynchronous等基础。 我理解这个问题,但不能得到解决方法,因为数组需要保留在函数内。 棘手。 码: 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'); […]

如何避免从闭包访问可变variables

我有这样的代码: for(var id=0; id < message.receiver.length; id++){ var tmp_id = id; zlib.gzip(JSON.stringify(message.json), function(err, buffer){ … pushStatusPool[message.receiver[tmp_id]] = null; // fix memory leak delete pushStatusPool[message.receiver[tmp_id]]; … }); } 我得到一个警告,在closures使用tmp_id可能会导致问题,因为它是一个可变的variables。 我怎么能避免呢? 我的意思是我怎么能发送一个不可变的variablescallback,因为这是一个for循环,我不能改变zlib.gzip代码? 换句话说,我怎么能把一个论点传递给一个封闭?