从特定类中经过一段时间后删除对象inParse

时间:2015-11-02 11:30:14

标签: parse-platform cloud-code

您好我有一个将照片上传到服务器的应用程序。 Parse只给我们20gb的存储空间,所以我不想超过这个限制。我想要服务器,以便它可以删除文件,如果它是3天。所以这是代码

Parse.Cloud.job('deleteOldPosts', function(request, status) {
// All access
Parse.Cloud.useMasterKey();

var today = new Date();
var days = 10;
var time = (days * 24 * 3600 * 1000);
var expirationDate = new Date(today.getTime() - (time));

var query = new Parse.Query('post');
    query.lessThan('createdAt', expirationDate);

    query.find().then(function (posts) {
        Parse.Object.destroyAll(posts, {
            success: function() {
                status.success('All posts are removed.');
            },
            error: function(error) {
                status.error('Error, posts are not removed.');
            }
        });
    }, function (error) {});

});

但是,如果我使用此代码,它将删除所有类中的文件。我只想让这段代码只用于一个类。是否可以这样做?

1 个答案:

答案 0 :(得分:1)

删除云代码中的对象时,请使用query.each代替query.find,以确保删除与查询匹配的所有对象。

find具有默认返回的100个对象的查询限制(如果使用limit则最多为1000个)。 Source

以下是使用promise链的更新代码,该链在每个destroy对象上调用Post。当所有的销毁承诺完成后,将达到成功状态,如果任何的销毁失败,则将达到错误状态。

Parse.Cloud.job('deleteOldPosts', function(request, status) {
    // All access
    Parse.Cloud.useMasterKey();

    var today = new Date();
    var days = 10;
    var time = (days * 24 * 3600 * 1000);
    var expirationDate = new Date(today.getTime() - (time));

    var query = new Parse.Query('post');
    query.lessThan('createdAt', expirationDate);
    query.each(function(post) {
        return post.destroy();
    }).then(function() {
        console.log("Delete job completed.");
        status.success("Delete job completed.");
    }, function(error) {
        alert("Error: " + error.code + " " + error.message);
        status.error("Error: " + error.code + " " + error.message);
    });
});