【问题标题】:Nodejs: Passing function specific variables to Async.parallel()Nodejs:将函数特定变量传递给 Async.parallel()
【发布时间】:2014-02-24 03:34:08
【问题描述】:

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

【问题讨论】:

  • 不,async 没有为此提供帮助。您可以尝试.bind() 或类似的部分应用方法,但首先您的回调很奇怪,可能会妨碍使用它们。

标签: javascript node.js asynchronous


【解决方案1】:

在编写函数时,您应该尊重回调作为 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

【讨论】:

    【解决方案2】:

    有没有一种简单的方法可以将变量传递给 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*/
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-10
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 2020-07-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多