2013-03-01 63 views
0

我有一个简单的例子:如何将变量传递给回调函数?

for (i in dbs) { 
     var db = dbs[i].split(':') 
     var port = dbs[i][0] 
     var host = dbs[i][0] 
     var client = redis.createClient(port, host) 
     tasks = [ [ "info" ] ] 
     client.multi(tasks).exec(function (err, replies) { 
      console.log(port) 
     }) 

如何打印为每个客户端corrent端口连接?

回答

5

一个简单的方法是封闭循环体在自调用匿名函数:

for (var i in dbs) { 
    (function(i) { 
     var db = dbs[i].split(":"); 
     var host = db[0]; // Probably 'db[0]' instead of 'dbs[i][0]'. 
     var port = db[1]; // Probably 'db[1]' instead of 'dbs[i][0]'. 
     var client = redis.createClient(port, host); 
     tasks = [ [ "info" ] ]; 
     client.multi(tasks).exec(function(err, replies) { 
      console.log(port); 
     }); 
    })(i); 
} 

这样的port电流值是否正确由封闭拍摄,将在经过回调可用到exec()

请注意,此回答假定dbs是一个对象,而不是数组,即使您将i用作循环变量。如果dbs是一个数组,你应该使用而不是一个索引的循环:

for (var i = 0; i < dbs.length; ++i) { 
    // ... 
} 

因为for... in循环are not meant to iterate over arrays