我在节点中渲染页面之前需要完成一堆长时间运行的数据库查询。每个查询都需要一些自己的变量。有没有一种简单的方法可以将变量传递给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*/}
);
答案 0 :(得分:5)
在编写函数时,您应该将回调视为最后一个参数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
答案 1 :(得分:0)
是否有一种简单的方法可以将变量传递给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*/
});