2013-03-01 74 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