2014-05-06 46 views
1

我有兩個類,組和成員資格。當一個團隊成立時,我也希望獲得相應的成員資格。我嘗試這樣做是這樣的:Parse.com Cloud Code - 在保存前創建另一個對象的新實例

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

我收到一個錯誤回來,說以下內容:

E2014-05-06T21:40:10.740Z] V30:before_save觸發集團 用戶xgzDnZ9h0A輸入: {「original」:null,「update」:{「admin」:{「objectId」:「xgzDnZ9h0A」,「className」:「_ User」,「__ type」:「指針」}, :「test」,「public」:false}} 結果:undefined

不是太su重新發生錯誤。我該如何去調試這樣的代碼,以便我可以很容易地找出問題所在?

回答

1

讓beforeSave只處理驗證,並將您的會員代碼移至afterSave。問題可能是你試圖存儲一個關係到一個尚未保存的對象(因爲你在beforeSave中,該對象還沒有一個objectId)

0

問題是你正試圖調用異步功能,並在等待完成之前離開。

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

,我將發佈工作代碼,如果這不是幫助。

相關問題