2016-04-27 73 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!) 
       } 
      } 
} 
相關問題