Search code examples
javascriptobjectparse-platformlimit

Parse javascript deleteAll() only deletes 20 objects even though my limit is 1000?


I'm trying to delete images off the server that's been there for more than 1 day, but for some reason it only deletes 20 images even though I set the limit to 1000.

Here's the code:

Parse.Cloud.job("deleteImages", function(request, status) {

  Parse.Cloud.useMasterKey();

    //Get yesterday
    var ts = Math.round(new Date().getTime() / 1000);
    var tsYesterday = ts - (24 * 3600);
    var dateYesterday = new Date(tsYesterday*1000);

    //Query with limit 1000
    var query = new Parse.Query("image");
    query.lessThan("createdAt", dateYesterday);
    query.limit(1000);


    query.find({
        success: function(result) {
          Parse.Object.destroyAll(result, {
            success: function() {
              status.success("Delete job completed");
              console.log("Success");
            },
            error: function(error) {
              if (error.code == Parse.Error.AGGREGATE_ERROR) {
                for (var i = 0; i < error.errors.length; i++) {
                  console.log("Couldn't delete " + error.errors[i].object.id +
                    "due to " + error.errors[i].message);
                    status.error("Delete error :" + error);
                }
              } else {
                status.error("Delete error :" + error);
                console.log("Delete aborted because of " + error.message);
              }
            },
          });
          status.success("Delete job completed");
        },
        error: function(error) {
            status.error("Error in delete query error: " + error);
            alert('Error in delete query');
        }
    });
});

Any help would be greatly appriciated! Thanks.


Solution

  • For anyone else experiencing the same issue, the solution was really weird and I don't understand why it works. However, by removing the status.success() from the code entirely seems to get the job done. I get an error saying " Failed with: success/error was not called" yet it still deletes 1000 images.

    Parse.Cloud.job("deleteImages", function(request, status) {
    
        Parse.Cloud.useMasterKey();
    
        //Get yesterday
        var ts = Math.round(new Date().getTime() / 1000);
        var tsYesterday = ts - (24 * 3600);
        var dateYesterday = new Date(tsYesterday*1000);
    
        //Query with limit 1000
        var query = new Parse.Query("image");
        query.lessThan("createdAt", dateYesterday);
        query.limit(1000);
    
    
        query.find({
            success: function(result) {
                Parse.Object.destroyAll(result, {
                    success: function() {
                        console.log("Success");
                    },
                    error: function(error) {
                        if (error.code == Parse.Error.AGGREGATE_ERROR) {
                            for (var i = 0; i < error.errors.length; i++) {
                                console.log("Couldn't delete " + error.errors[i].object.id +
                                "due to " + error.errors[i].message);
                            }
                        } else {
                            console.log("Delete aborted because of " + error.message);
                        }
                    }
                });
            },
            error: function(error) {
                status.error("Error in delete query error: " + error);
            }
        });
    });