当我删除数据库中的内容时,我首先删除其中的注释对象。
就像这样 BeforeDelete( 删除内容中的所有注释 删除有关内容的其他内容 )。然后( 删除内容 )
但是有些内容有超过200个对象,在删除内容之前必须删除这些对象,3秒对于所有处理都不够。 在3秒内,解析可以删除大约40-45个对象。
那么我该怎样做才能延长这段时间呢?
答案 0 :(得分: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");
}
});
<强>队列强>
对于更复杂的情况,我将使用某种辅助队列机制。
当对象即将删除时。我要么更新一个字段以反映它的挂起删除状态“set(”pendingDeletion“,true)。
或者我会将它添加到某些“deleteQueue”中,会定期检查。
工作
您的所有“子”对象都可以引用其父级。拥有一个定期运行的云作业。在每次调用时检查子项的父引用是否无效。如果是,孩子是孤儿,并摧毁孤儿。
我会尝试使用DestroyAll方法,因为它比其他方法简单得多。但是,如果DestroyAll超时,我可以使用代码示例扩展其他两种方法。