parse.com afterDelete触发器不能完全正常工作

时间:2014-12-16 23:24:35

标签: triggers parse-platform cloud-code

我有一个Parse类Comment。每个Comment都由ParseUser提交,我想在我的解析用户中跟踪他提交了多少条评论,因此我在Parse Cloud Code中创建了以下触发器:

/*
* -------------   AFTER SAVE
*/
Parse.Cloud.afterSave("Comment", function(request) {

  //if it's the first save
  if(!request.object.existed())  {

    //increment the User's comments
    query = new Parse.Query(Parse.User);
    query.get(request.object.get("createdBy").id, {
      success: function(user) {

        user.increment("comments");
        user.save();

      }, error: function(error) {
        console.log("Error searching the User");
      }
    });
  }
});

/*
* -------------   AFTER DELETE
*/
Parse.Cloud.afterDelete("Comment", function(request) {

  //decrement the User's comments
  console.log("The user who submitted the comment has the id: " + request.object.get("createdBy").id);
  query = new Parse.Query(Parse.User);
  query.get(request.object.get("createdBy").id, {
    success: function(user) {

      console.log("Retrieved the user. He has username: " + user.get("username"));

      user.increment("comments", -1);
      user.save();

    }, error: function(error) {
      console.log("Error searching the user - error afterDelete@Comment 2");
    }
  });

});

问题是afterSave触发器有效,但afterDelete没有,我无法弄清楚原因。我可以检索User,因为两个console.log显示哪个是正确的用户,但我无法在increment(user, -1)之后保存它。提前谢谢。

编辑:
这里是User触发器:

/*
* -------------   BEFORE SAVE
*/
Parse.Cloud.beforeSave("User", function(request, response) {

  var comments = request.object.get("comments");
  if(comments == null || comments < 0)
    request.object.set("comments", 0);  

  var itemSaved = request.object.get("itemSaved");
  if(itemSaved == null || itemSaved < 0)
    request.object.set("itemSaved", 0);

  var username = request.object.get("username");
  if(username.length < 6 || username.length > 20)
    response.error("username must be longer than 6");
  else  {
    response.success();
  }

});

/*
* -------------   AFTER DELETE
*/
Parse.Cloud.afterDelete("User", function(request) {
  query = new Parse.Query("Comment");
  query.equalTo("createdBy", request.object.id);
  query.find({
    success: function(comments) {
      Parse.Object.destroyAll(comments, {
        success: function() {},
        error: function(error) {
          console.error("Error deleting related comments " + error.code + ": " + error.message);
        }
      });
    },
    error: function(error) {
      console.error("Error finding related comments " + error.code + ": " + error.message);
    }
  });
});

1 个答案:

答案 0 :(得分:2)

Per Parse的documentation,“如果你想在Parse JavaScript SDK中使用afterDelete作为预定义的类(例如Parse.User),你不应该为第一个参数传递一个String。相反,你应该通过班级本身。“