Parse.com Cloud Code – 在保存之前创build另一个对象的新实例

我有两个class级,组和会员。 当一个小组成立的时候,我也希望得到相应的成员资格。 我试图这样做:

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); } }); } 

我收到一个错误,说:

input:{“original”:null,“update”:{“admin”:{“objectId”:“xgzDnZ9h0A”,“className” :“_ User”,“__ type”:“Pointer”},“name”:“test”,“public”:false}}结果:undefined

不太确定错误是什么。 我怎么能去debugging这样的代码,所以我可以很容易地隔离问题?

让beforeSave只处理validation,并将您的会员代码移到afterSave。 问题可能是你试图存储一个关系到一个尚未保存的对象(因为你在beforeSave中,该对象还没有一个objectId)

问题是你正试图调用一个asynchronous函数,并在等待完成之前离开。

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

你应该在你的查询的成功响应中写入你的createMembershipForGroup函数,并在这里返回你的response.success()方法

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

如果这没有帮助,我会发布工作代码。