2014-12-16 2 views
0

저는 Parse 클래스 Comment입니다. 각 CommentParseUser에 의해 제출되고 나는 그가 제출 한 얼마나 많은 의견 내 구문 분석 한 사용자를 추적 싶어, 그래서 구문 분석 클라우드 코드에 다음 트리거를 만들었습니다parse.com afterDelete 트리거가 완전하게 작동하지 않습니다.

/* 
* ------------- 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 [email protected] 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

당 구문 분석의 documentation, "당신은 구문 분석 자바 스크립트 SDK (예를 들어 Parse.User), 당신이해야에 미리 정의 된 클래스 afterDelete를 사용하려면 첫 번째 인수에 String을 전달하지 말고 클래스 자체를 전달해야합니다. "