1

I have two classes, Groups and memberships. When a group is made, I'd like its corresponding membership to be made as well. I attempt to do so like this:

Parse.Cloud.beforeSave("Group", function(request, response) {   
    var name = request.object.get("name");

    if (!name) {
        response.error("A Group must have a name");
    } else {
        if (!(/^\w+$/i.test(name))){
            response.error("Only letters and numbers, please.");
        }
        var query = new Parse.Query("Group");
        query.equalTo("name", name);
        query.first({
            success: function(object) {
                if (object) {
                    response.error("A group with this name exists.");
                } else {
                    createMembershipForGroup(request.object, Parse.User);
                    response.success();
                }
            },
            error: function(error) {
                response.error("Could not validate Uniqueness");
            }
        });
    }
});

createMembershipForGroup = function(group, user) {
    var MembershipClass = Parse.Object.extend("Membership");
    var membership = new MembershipClass();

    membership.set("group", group);
    membership.set("user", user);
    membership.save(null,{
      success:function(membership) { 
        response.success(membership);
      },
      error:function(error) {
        response.error(error);
      }
    });
}

I receive an error back, saying the following:

E2014-05-06T21:40:10.740Z] v30: before_save triggered for Group for user xgzDnZ9h0A Input: {"original":null,"update":{"admin":{"objectId":"xgzDnZ9h0A","className":"_User","__type":"Pointer"},"name":"test","public":false}} Result: undefined

Not too sure what the error is. How could I go about debugging code like this so I can isolate the issue easily?

2 Answers 2

1

Let beforeSave handle only the validation, and move your membership code to afterSave. The problem is probably that you're trying to store a relation to an object that is not yet saved (as you're in beforeSave, the object does not yet have an objectId)

Sign up to request clarification or add additional context in comments.

Comments

0

problem is you are trying to call an async function and leaves before wait to complete it.

createMembershipForGroup(request.object, Parse.User);//Calling async func
response.success();//Leaves beforeSave function

You should write your createMembershipForGroup function inside success response of your query and return your response.success() method in here

membership.save(null,{
  success:function(membership) { 
    response.success(membership); // this should be response of beforeSave
  },
  error:function(error) {
    response.error(error);
  }
});

I will post working code if this not helps.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.