... однако ошибки отслеживания и различные способы передачи данных для потока управления иногда приводят к очень трудным разработкам.
Недавно я создал простую абстракцию с именем "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