2011-08-29 66 views
1

如何將相同的參數應用於函數數組?nodejs異步同一個參數到一個函數數組?

作品:

async.parallel([func(arg, arg2), func2(arg, arg2)], 
function() { 
    next(); 
}); 

陣列具有內部雖然不確定/各種功能的功能,所以我不知道其功能是我應該發送到並行方法。

在不同的文件中我建立了功能陣列:

funcArray.push(func2) 

因此,我有一個這樣的數組:

[func, func2] 

我想只是做:

async.parallel(funcArray, 
function() { 
    next(); 
}); 

並具有所有相同的參數應用於所有功能。我怎樣才能做到這一點?謝謝。

最後寫我自己:

_.each(obj, function (func) { 
    func(req, res, function() { 
     i++ 
     if (i == objSize) { 
     next() 
     } 
    }) 
    })  

回答

2

未經檢驗的,但這應該工作:

var args  = [ arg, arg2 ] 
    , funcCalls = [] 
; 

for(var i = 0; i < funcArray.length; i++) { 
    funcCalls.push(function() { 
    funcArray[i].apply(this, args); } 
); 
} 

async.parallel(funcCalls, next); 

或者,如果你已經知道你有多少參數有,你不需要在中間部分用apply

for(var i = 0; i < funcArray.length; i++) { 
    funcCalls.push(function() { 
    funcArray[i](arg, arg2); } 
); 
} 

最後,你真的可以用擰緊了如由例如提供的地圖功能。 Underscore.js

async.parallel(_.map(funcArray, 
    function(func) { return function() { func(arg, arg2); } } 
), next); 

......但接下來遇到您的代碼的人可能會殺了你。

+1

只是使用async.apply向函數添加參數。請參閱https://github.com/caolan/async#applyfunction-arguments – user1102171

相關問題