2015-11-02 32 views
1

您好我有一個應用程序,將照片上傳到服務器。解析僅給我們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) {}); 

}); 

但是如果我使用此代碼,將所有的類刪除文件。我只想讓這個代碼只在一個類上工作。是否有可能這樣做?

+0

什麼是3天年? – NSNoob

+0

另外,在進行查詢時,使用帶有classname的查詢。 – NSNoob

+0

首先感謝您的評論我沒有得到您的評論「什麼是3天的時間?」 – Satsuki

回答

1

刪除雲代碼中的對象時,請使用query.each而不是query.find以確保刪除與查詢匹配的所有對象。

find具有100個默認返回對象的查詢限制(如果使用limit,則最多返回1000個)。 Source

以下是使用承諾鏈的更新代碼,該承諾鏈在每個Post對象上調用destroy。當銷燬承諾全部已完成時,將達到成功狀態,並且如果任何銷燬失敗,則將達到錯誤狀態。

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); 
    }); 
}); 
相關問題