Вы не можете ждать асинхронного события перед возвратом - это определение асинхронного!Попытка принудить Node к этому стилю программирования причинит вам только боль.Наивным примером будет периодически проверять, является ли callstack
пустым.
var callstack = [...];
function processHub(contents) {
doSomethingAsync(..., callstack);
}
// check every second to see if callstack is empty
var interval = setInterval(function() {
if (callstack.length == 0) {
clearInterval(interval);
doSomething()
}
}, 1000);
Вместо этого обычным способом выполнения асинхронных операций в Node является реализация обратного вызова вашей функции.1006 *
Если вы действительно хотите что-то вернуть, посмотрите обещания ;они гарантированно отправят событие сразу или в какой-то момент в будущем, когда они будут разрешены.
function processHub(hubFileContents){
var callStack = [];
var myNewObj = {};
var promise = new Promise();
// assuming processObjWithRef takes a callback
processObjWithRef(samplePayload, myNewObj, callStack, function() {
if (callStack.length == 0) {
promise.resolve(some_results);
}
});
return promise;
}
processHubPromise = processHub(...);
processHubPromise.then(function(result) {
// do something with 'result' when complete
});