2015-04-03 39 views
1

当我删除数据库中的内容时,首先删除其中的注释对象。如何超越Parse.com BeforeDelete/AfterDelete 3秒规则?

它这样 BeforeDelete( 删除所有内容 的意见,删除其他的东西有关内容 )。然后( 删除内容 )

但有些内容有超过200个对象,其具有在删除内容之前被删除,并且3秒对于所有的处理都是不够的。 在3秒内解析可以删除大约40-45个物体。

那么我能做些什么来延长这个时间?

回答

0

您不能在后期保存/删除挂钩上延长3秒的限制。

我以前遇到过这个问题,我会采取两种方法之一。

DestroyAll

使用Parse.Object.DestroyAll方法。

这比手动迭代要销毁的对象列表快得多,并且一次销毁它们一个。但请注意,如果您销毁的子对象具有自己的删除后挂钩,则可能会超过3秒的总限制。

其实是有一个解析博客文章destroyAll它可帮助你在这里: http://blog.parse.com/2013/08/22/deleting-objects/

我重复他们的网页上的例子在这里。它几乎直接解决了在删除后钩子中删除多个对象的用例。

Parse.Cloud.beforeDelete("Comment", function(request, response) { 
    var elapsed = 0; 
    var date = request.object.get("date"); 

    if (date) { 
    elapsed = (Date.now() - date.getTime())/1000; 
    } 

    if (elapsed < 60) { 
    response.success(); 
    } else { 
    response.error("Can't delete comments more than a minute old"); 
    } 
}); 

队列

对于更复杂的情况下,我会使用某种二级队列机制。

当一个对象到期删除。我会请更新字段,以反映它的未决删除状态“设置(” pendingDeletion”,真)。

或者我将会把它加一些‘deleteQueue’,这是定期检查。

乔布斯

你所有的“孩子”对象都可以有一个对他们父母的引用有一个定期运行的云作业在每次调用时检查孩子的父引用是否无效如果是,是一个孤儿,并摧毁孤儿

我会尝试Dest​​royAll方法首先,因为它比其他人简单得多。但是,如果DestroyAll超时,我可以使用代码示例对其他两种方法进行扩展。