如何超越Parse.com BeforeDelete / AfterDelete 3秒规则?

时间:2015-04-03 13:02:12

标签: parse-platform

当我删除数据库中的内容时,我首先删除其中的注释对象。

就像这样 BeforeDelete(  删除内容中的所有注释  删除有关内容的其他内容 )。然后(  删除内容 )

但是有些内容有超过200个对象,在删除内容之前必须删除这些对象,3秒对于所有处理都不够。 在3秒内,解析可以删除大约40-45个对象。

那么我该怎样做才能延长这段时间呢?

1 个答案:

答案 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 &lt; 60) {
    response.success();
  } else {
    response.error("Can't delete comments more than a minute old"); 
  }
});

<强>队列

对于更复杂的情况,我将使用某种辅助队列机制。

当对象即将删除时。我要么更新一个字段以反映它的挂起删除状态“set(”pendingDeletion“,true)。

或者我会将它添加到某些“deleteQueue”中,会定期检查。

工作

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

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