Nodejs:将函数特定variables传递给Async.parallel()

我有一堆长时间运行的数据库查询,我需要完成之前,我在节点中呈现一个页面。 每个查询都需要一些自己的variables。 有没有简单的方法将variables传递给nodejs中的async.parallel()实用程序?

async.parallel([ queryX(callback, A1, A2, A3), queryX(callback, B1, B2, B3), queryY(callback, C1, C2, C3), queryY(callback, D1, D2, D3), queryZ(callback, E1, E2, E3), queryZ(callback, F1, F2, F3), ], function(err, results) { /*Do Render Stuff with Results*/} ); 

       

网上收集的解决方案 "Nodejs:将函数特定variables传递给Async.parallel()"

编写函数时,应该将callback作为nodejs约定的最后一个参数。 这样你可以使用Function.bind来调用你的函数。

 var queryx = function(A,B,C,callback){ .... ; callback(err,result) }; async.parallel([queryx.bind(null,A1,B2,A3),...,],callback); 

bind返回一个部分应用程序:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind

有没有简单的方法将variables传递给nodejs中的async.parallel()实用程序?

不是在async本身,你可以为此写一个辅助函数:

 function passWithCallbackFirst(fn) { var args = [].slice.call(arguments, 1); return function(cb) { args.unshift(cb); return fn.apply(this, args); }; } async.parallel([ passWithCallbackFirst(queryX, A1, A2, A3), passWithCallbackFirst(queryX, B1, B2, B3), passWithCallbackFirst(queryY, C1, C2, C3), passWithCallbackFirst(queryY, D1, D2, D3), passWithCallbackFirst(queryZ, E1, E2, E3), passWithCallbackFirst(queryZ, F1, F2, F3), ], function(err, results) { /*Do Render Stuff with Results*/ });