nodejs асинхронные аргументы для массива функций? - PullRequest
1 голос
/ 30 августа 2011

Как применить те же аргументы к массиву функций?

Работает:

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

Хотя в массиве есть функции неопределенных / различных функций, поэтому я не уверенкакие функции я должен отправлять в параллельный метод.

В различных файлах я строю массив функций:

funcArray.push(func2)

В результате у меня есть такой массив:

[func, func2]

Я хотел бы простоdo:

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

и применять одинаковые аргументы ко всем функциям.Как я могу это сделать?Спасибо.

Закончила писать свою:

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

1 Ответ

2 голосов
/ 30 августа 2011

Не проверено, но это должно работать:

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);

... но тогда следующий парень, который найдет ваш код, может убить вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...