0

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;
};
Satpal
  • 132,252
  • 13
  • 159
  • 168
Joe H
  • 123
  • 1
  • 10

0 Answers0