2012-09-14 28 views
0

我正在使用async和Node.js.它運行良好時,我有功能的固定數量來執行:如何使用異步在node.js中運行變量序列或javascript函數?

async.series([ 
    function(cb) { ...one ... }, 
    function(cb) { .. two ... }, 
], function(err, res) { 
    ...done 
}); 

但現在我需要執行的功能的任意數量,這取決於在一個陣列中的值,並且不能圖如何傳遞數組元素:

var values = [1, 2, 3, ... ]; 
var calls = []; 
for (var i = 0; i < values.length; i++) { 
    calls.push(function(cb) { 

     HOW TO PASS values[i] HERE? 

    }); 
} 
async.series(calls, function(err, res) { 
    ...done 
}); 

回答

1

您應該能夠使用閉包:

var values = [1, 2, 3, ... ]; 
var calls = []; 
for (var i = 0; i < values.length; i++) { 
    calls.push((function(index) { 
     return function(cb) {  
      // use values[index] here 
     }; 
    })(i)); 
} 
async.series(calls, function(err, res) { 
    ...done 
}); 
+0

正是我需要的。謝謝。 –

2

這只是普通異步-IN-A-循環問題。您需要關閉i的值,其中聲明瞭推送的函數表達式。這既可以用做IEFE作爲你的循環體,或甚至.forEach().map()簡單:

var calls = values.map(function closure(val, i) { 
    return function(cb) { 
     // use val and i here, which are bound to this execution of closure 
    }; 
}); 
+0

太糟糕了,我不能接受2個答案。謝謝。 –

相關問題