2013-10-30 50 views
0

有沒有辦法將動態值傳遞給js或jquery或nodejs中的回調函數。在回調方法中傳遞動態值

for(var i = 0; i < 10; i++) 
{ 
    filename = 'file'+i+'.html'; 
    request(url, function(error, response, body) { 
    test(error, response, body, filename); 
    }); 
} 

    function test(error, response, body, filename) { 
    console.log('file name ' + filename); 
    if(response.statusCode == 200){ 
    console.log('done'); 
    } 

我引用了這篇文章,以便將值傳遞給回調函數。

鏈接:[JavaScript的:將參數傳遞給回調函數

輸出似乎總是9

我怎麼能動態傳遞價值?回調函數總是引用文件名的最後一個值。

+0

它,因爲你的「請求」通話異步。使用回調邏輯來克服這個問題。 – anand4tech

+0

@ anand4tech如何實現這一目標..你可以舉一些例子。 – swastican

回答

2

在您的示例中,您將在每次迭代中更改相同變量filename的值。

因此,您應該以某種方式將filename的值綁定到request回調的上下文中。

例如,你可以叫request的anonimous函數中:

function test (error, response, body, filename) { 
    console.log('file name ' + filename); 
    if (response.statusCode == 200) console.log('done'); 
} 

for (var i = 0; i < 10; i++) { 
    (function (filename) { 
    request(url, function(error, response, body) { 
     test(error, response, body, filename); 
    }); 
    })('file'+i+'.html') 
} 

替代的解決方案是讓你test功能的函數工廠:

function test (filename) { 
    return function (error, response, body) { 
    console.log('file name ' + filename); 
    if (response.statusCode == 200) console.log('done'); 
    }; 
} 

for (var i = 0; i < 10; i++) { 
    request(url, test('file'+i+'.html')); 
} 
+0

好的。謝謝。檢查。 – swastican

+0

它的工作。大。謝謝 – swastican