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

时间:2014-02-23 18:39:57

标签: javascript node.js asynchronous

我在节点中渲染页面之前需要完成一堆长时间运行的数据库查询。每个查询都需要一些自己的变量。有没有一种简单的方法可以将变量传递给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*/}
);

2 个答案:

答案 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*/
});