I came across something similar, maybe that would be helpful.
AJAX , . AJAX, , AJAX, . , , , .
$q.all , , promises, , promises .
( , ) , $q.all, .
var promisesArr = [];
var unresolved = 0;
function getChildNodes(node) {
var url = BASE_URL + '/' + node.id;
var prom = $q(function (resolve, reject) {
unresolved++;
$http.get(url).then(function (resp) {
angular.forEach(resp.data.children, function(v){
var newNode = {};
newNode.id = v.id;
getChildNodes(newNode);
node.children.push(newNode);
});
resolve();
unresolved--;
}, function () {
console.log('ERROR');
reject();
unresolved--;
})
});
promisesArr.push(prom);
}
rootNode = {id: 1}
getChildNodes(rootNode);
allResolved();
function allResolved() {
if (unresolved > 0) {
$q.all(promisesArr).then(allResolved);
} else {
RenderTree(rootNode);
}
}