目前我设置了一个计时器,每2秒对一个解析类进行查询,以查看是否有任何数据发生了变化。如果数据已更改,则调用refreshData
方法,以便使用新的解析数据更新我的视图。
因此,当在解析类中更新数据时,它几乎会立即在应用程序中更新。
问题是这会导致大量不必要的网络流量,我需要避免这种情况。
如何在解析类中检测数据更改的时间替换计时器,然后告诉应用程序调用{{1}}方法?
答案 0 :(得分:3)
afterSave Triggers
//this will trigger everytime the className objects has changed
Parse.Cloud.afterSave("className", function(request) {
//Do some stuff here //like calling http request or sending push 'data has changed' to installed mobile device
console.log("Object has been added/updated"+request.object.id);
});
https://parse.com/docs/js/guide#cloud-code-aftersave-triggers
您需要先部署一个云代码,然后才能解决您的问题: - )
在某些情况下,您可能希望在保存对象后执行某些操作,例如推送。您可以通过使用afterSave方法注册处理程序来完成此操作。例如,假设您要跟踪博客帖子上的评论数量。您可以通过编写如下函数来实现:
Parse.Cloud.afterSave("Comment", function(request) {
query = new Parse.Query("Post");
query.get(request.object.get("post").id, {
success: function(post) {
post.increment("comments");
post.save();
},
error: function(error) {
console.error("Got an error " + error.code + " : " + error.message);
}
});
});
在处理程序终止后,客户端将收到对保存请求的成功响应,无论它如何终止。例如,即使处理程序抛出异常,客户端也会收到成功的响应。运行处理程序时发生的任何错误都可以在Cloud Code日志中找到。
如果要在Parse JavaScript SDK中使用afterSave作为预定义类(例如Parse.User),则不应为第一个参数传递String。相反,你应该自己传递这个类。
答案 1 :(得分:1)
我不确定我的解决方案是否符合您的需求,但在 CloudCode 中使用beforeSave
触发器,结合 DirtyKeys 将为您节省时间和查询:http://blog.parse.com/learn/engineering/parse-objects-dirtykeys/
使用 DirtyKeys ,您可以检测到您的课程完成了一些更改,然后您可以构建新的触发器,并在完成后执行您需要的任何操作。