Подтвердить что ты не робот

Каков наилучший модуль потока управления для node.js?

Я использовал caolan async module, который очень хорош, однако ошибки отслеживания и различный способ передачи данных для управления потоком вызывает развитие иногда бывает очень сложно.

Я хотел бы знать, есть ли какие-либо лучшие варианты или то, что в настоящее время используется в производственных средах.

Спасибо за чтение.

4b9b3361

Ответ 1

Я использую async. Чтобы помочь отслеживать ошибки, рекомендуется использовать функции, вместо того, чтобы загружать анонимные функции:

async.series([
  function doSomething() {...},
  function doSomethingElse() {...},
  function finish() {...}
]);

Таким образом вы получите более полезную информацию в трассировке стека.

Ответ 2

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

Недавно я создал простую абстракцию с именем "wait.for" для вызова асинхронных функций в режиме синхронизации (на основе Fibers): https://github.com/luciotato/waitfor

Используя wait.for, вы можете использовать "try/catch" при одновременном вызове async-функций, и вы сохраняете функциональную область (без необходимости закрытия). Пример:

function inAFiber(param){
  try{
     var data= wait.for(fs.readFile,'someFile'); //async function
     var result = wait.for(doSomethingElse,data,param); //another async function
     otherFunction(result);
  }
  catch(e) {
     //here you catch if some of the "waited.for" 
     // async functions returned "err" in callback
     // or if otherFunction throws
};

см. примеры в https://github.com/luciotato/waitfor

Ответ 3

Иногда трудно помещать все функции в массив. Когда у вас есть массив объектов и вы хотите что-то сделать для каждого объекта, я использую что-то вроде приведенного ниже примера.

подробнее в: http://coppieters.blogspot.be/2013/03/iterator-for-async-nodejs-operations.html

 var list = [1, 2, 3, 4, 5];
 var sum = 0;

 Application.each(list, function forEachNumber(done) { 
   sum += this; 

   // next statement most often called as callback in an async operation
   // file, network or database stuff

   done(); // pass an error if something went wrong and automatically end here

 }, function whenDone(err) { 
   if (err) 
     console.log("error: " + err);
   else
     console.log("sum = " + sum); 

});

Я называю функции, потому что легче отлаживать (и читать легче)