在 Parse 中保存基本关系

Saving a basic relation in Parse

这个例子很简单,但毫不奇怪,它不起作用。 mLate 是来自 Late table 的对象或对象数组。 我的代码:

var user = Parse.Object.extend("User"); 
var userQuery = new Parse.Query(Parse.User);        
var Late = Parse.Object.extend("Late");        
var lateQuery = new Parse.Query(Late);
userQuery.get("yCDDEWoiwM", {//this is where the userID goes
     success: function (userDetails) {
           var relation = userDetails.relation("mLate");
           relation.add(mLate);
           userDetails.save(); 

鉴于 Parse SDK,我无法想象我哪里出错了。我不断得到 POST https://api.parse.com/1/classes/_User/yCDDEWoiwM 400(错误请求)


新假设和更多代码

我知道这真的很简单,我真的很生气 Parse 很少在他们解释的内容中添加哪怕是一点点细节。你看过他们的吗API(好吧,我不想上我的肥皂盒。。。)

我的假设是,我从 Late table 中转换了 Parse.Object 几次,并且不知何故 Parse 不再知道那里发生了什么。

下面是更完整的代码:

var user = Parse.Object.extend("User"); 
    var userQuery = new Parse.Query(Parse.User);        
    var Late = Parse.Object.extend("Late");        
    var lateQuery = new Parse.Query(Late);
    userQuery.get("yCDDEWoiwM", {//this is where the userID goes
         success: function (userDetails) {
mLate = [];
mLate1 = [];

lateQuery.find({
     success: function (allLate) {
          var aLate = allLate
          for (var i = 0; i < aLate.length; i++){
          var oneLate = aLate[i];
          if(something valid) {
          mLate.push(oneLate)
          }else{
          mLate1.push(oneLate)

var relation = userDetails.relation("mLate");
               relation.add(mLate);
               userDetails.save();

不是 100% 清楚意图,因为 mLate 变量未定义,但您可以获得这样的用户:

var user = new Parse.User({id:"yCDDEWoiwM"});
user.fetch().then(function(user) {
    // add to the relation here, then
    return user.save();
}).then(function () {
    console.log("saved");
});

你不能那样扩展用户。所有特殊 类(用户、安装、角色等)都应这样处理:

"_User", "_Roles", "_Installation"

例如:

var user = Parse.Object.extend("_User");

但最好以这种方式引用它们:

var user = Parse.Object.extend(Parse.User);

但据我所知,也不需要第一行创建 user 对象。如果您只想创建一个查询,您也不需要 "extend" 一个对象。如果您想创建一个指针,通常使用 "extending" 但在您的情况下您不需要。

看看这是否适合你:

//var user = Parse.Object.extend(Parse.User); 
var userQuery = new Parse.Query(Parse.User);        
//var Late = Parse.Object.extend("Late");        
var lateQuery = new Parse.Query("Late");
userQuery.get("yCDDEWoiwM", {//this is where the userID goes
     success: function (userDetails) {
           var relation = userDetails.relation("mLate");
           relation.add(mLate);
           userDetails.save(); 

如果你想让查询更动态一点,你可以这样做:

var userQuery = new Parse.Query(Parse.User);               
queryQuery.equalTo("objectId", userId); 
userQuery.first().then(function(userDetails){

   var relation = userDetails.relation("mLate");
   relation.add(mLate);

   return Parse.Promise.when(userDetails.save());
}).then( // make your call to response.success ...);

另一个可能的问题是您的函数在 userDetails.save() 操作有机会完成之前返回。如果您将查询修改为类似于上面的内容以使用 Promise 那么它将保证对 save() 的异步调用将实际完成。

未显示的是调用 response.successerror 的承诺链的延续,但您可以在其中添加它。