The below code is designed to recursively retrieve files from folders. $q.all(docDefs) is resolving when the first promise is resolved, even though the docDefs array shows multiple unresolved promises (the first promise shows a status of 1, while all others in array show a status of 0).
var getDocsAndFolders = function(siteUrl, rootFolderUrl) {
var deferred = $q.defer();
var documents = [];
var folders = [];
var docDefs = [];
var getDocs = function(folder) {
var def = $q.defer();
folders.push(folder);
$q.all([getDocuments(siteUrl, folder.ServerRelativeUrl), getFolders(siteUrl, folder.ServerRelativeUrl)])
.then(function(d) {
documents = documents.concat(d[0].data.d.results);
angular.forEach(d[1].data.d.Folders.results, function(rf) {
if (rf.ServerRelativeUrl.toLowerCase() != (rootFolderUrl + '/Forms')
.toLowerCase()) docDefs.push(getDocs(rf));
});
def.resolve();
});
return def.promise;
};
docDefs.push(getDocs({
Name: 'Library',
ServerRelativeUrl: rootFolderUrl
}));
$q.all(docDefs)
.then(function() {
deferred.resolve({
documents: documents,
folders: folders
});
});
return deferred.promise;
};