2016-04-27 70 views
0

我正在编写User类中的友谊关系,该类定位于一个补充类(名为Matrix)。目标是为每个朋友提供更多信息。解析:Cloud JS代码与Swift不会产生相同的结果

案例#1:iOS/Swift提供了预期的结果。

func saveRelation(user: User, state: Bool) { 
    if let dbOwner = self.dbUser, dbPeer = user.dbUser { 
     let dbMatrix = PFObject(className: "Matrix") 

      dbMatrix["userid"] = dbPeer 
      dbMatrix.saveInBackgroundWithBlock({ (success: Bool, error: NSError?) -> Void in 
       if(error == nil) && (success == true) { 

        let relation = dbOwner.relationForKey("friend") 
         relation.addObject(dbMatrix) 

        dbOwner.saveInBackgroundWithBlock({ (success: Bool, error: NSError?) -> Void in 
         if(error == nil) && (success == true) { 
          self.directory.friend.append(user) 

          Trace.log("Relation \(user.account.id)", message: "friend") 
         } else { 
           ParseError.handle(error!) 
         } 
        }) 
       } 
     }) 
    } 
} 

哪里是的dbowner的currentUser和dbPeer是皮卡从列表

User ClassMatrix ClassRelation (from User to Matrix)

案例#2:解析云计算的代码会导致意想不到的关系。只有一个关系被插入。

var UserGet = function(id, res) { 
var query = new Parse.Query(Parse.User); 
    query.get(id, { 
    success: function(dbUser) { res.success(dbUser); }, 
    error: function(error) { res.error(error); } 
    }); 
} 

Parse.Cloud.define('Relation.friend', function(req, res) { 
    Parse.Cloud.useMasterKey(); 
    var owner = req.user; 
    var query = UserGet(req.params.peerId, { 
    success: function(dbPeer) { 
     var Matrix = Parse.Object.extend("Matrix"); 
     var matrix = new Matrix(); 

     matrix.set("userId", dbPeer); 
     matrix.save(null, { 
      success: function(dbMatrix) { 
        var relation = owner.relation("friend"); 
         relation.add(dbMatrix); 

        owner.save(null, { 
         success: res.success(true), 
         error: res.error("Update.failed") }); 
       }, 
      error: function(_error) { 
       res.error("Save.failed"); 
       } 
     }); 
    }, 
    error: function(_error) { 
     res.error("Query.failed"); 
    } 
    }); 
}); 

与客户通话波纹管:

func saveRelation(user: User, state: Bool) { 
     PFCloud.callFunctionInBackground("Relation.friend", 
      withParameters: [ "peerId" : user.account.id 
          ]) 
      { (success: AnyObject?, error: NSError?) -> Void in 
       if(error == nil) && (success as? Bool == true) { 
        self.directory.friend.append(user) 

        Trace.log("Relation \(user.account.id)", message: "friend") 
       } 
      } 
    } 

Matrix Class (case #2)Relation (case #1)

任何帮助表示赞赏。

回答

0

我已经解决了我的问题,但未提示'req.user'是为每个请求设置的。

查看服务器日志显示只有第一个请求添加一个关系,而第二个请求携带一个空值“req.user”。

'content-length': '326', 
connection: 'close' } { 
"friend": { 
    "__op": "AddRelation", 
    "objects": [ 
    { 
     "__type": "Pointer", 
     "className": "_User", 
     "objectId": "kdja9IlKgm" 
    } 
    ] 
} 
} 

'content-length': '217', 
connection: 'close' } {} 
verbose: { 
    "response": { 
    "updatedAt": "2016-04-28T05:25:00.282Z" 
    } 
} 

因此,我改变了我的API函数有两个参数,“fromId”和“风湿”,这是在任何来电查询。

Parse.Cloud.define('Relation.friend', function(req, res) { 
Parse.Cloud.useMasterKey(); 
var queryTo = UserGet(req.params.toId, { 
    success: function(dbTo) { 
    var queryFrom = UserGet(req.params.fromId, { 
     success: function(dbFrom) { 

     var Matrix = Parse.Object.extend("Matrix"); 
     var matrix = new Matrix(); 
      matrix.set("userId", dbTo); 
      matrix.save(null, { 
      success: function(dbMatrix) { 

       var relation = dbFrom.relation("friend"); 
        relation.add(dbMatrix); 

       dbFrom.save(null, { 
        success: function() { 
         console.log("<<<Update.Success>>>"); 
         res.success(true); 
         }, 
        error: function(_error) { 
         console.log("<<<Update.failed>>>"); 
         res.error("Update.failed"); 
         } 
       }); 
      }, 
      error: function(_error) { 
       console.log("<<<Save.failed>>>"); 
       res.error("Save.failed"); 
       } 
      }); 
     }, 
     error: function(_error) { 
      res.error("<<<QueryFrom.failed>>>"); 
      } 
     }); 
    }, 
    error: function(_error) { 
     res.error("<<<QueryTo.failed>>>"); 
     } 
    }); 
}); 

客户端函数调用相应地改变。

func saveRelation(user: User, state: Bool) { 
     PFCloud.callFunctionInBackground("Relation.friend", 
      withParameters: [ 
           "fromId": owner.account.id, 
           "toId" : user.account.id 
          ]) 
      { (success: AnyObject?, error: NSError?) -> Void in 
       if(error == nil) && (success as? Bool == true) { 
        self.directory.friend.append(user) 

        Trace.log("Relation \(owner.account.id) & \(user.account.id)", message: "friend") 
       } else { 
        ParseError.handle(error!) 
       } 
      } 
} 
相关问题