Какой модуль потока управления является лучшим для node.js? - PullRequest
18 голосов
/ 05 августа 2011

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

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

Ответы [ 3 ]

17 голосов
/ 05 августа 2011

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

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

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

4 голосов
/ 07 марта 2014

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

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

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

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

0 голосов
/ 18 марта 2013

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

Подробнее читайте в: 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); 

});

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

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