簡體   English   中英

如何將變量傳遞給回調函數?

[英]How to pass variable to callback function?

我有一個簡單的例子:

   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)
       })

如何為每個客戶端連接打印相應的端口?

一種簡單的方法是將循環主體包含在一個自調用匿名函數中:

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()的回調中使用。

請注意,即使您將i用作循環變量,該答案也假定dbs是一個對象,而不是數組。 如果dbs是一個數組,則應改用索引循環:

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

因為for... in循環並不意味着要在array上進行迭代

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM