[英]Parse : Cloud JS code vs Swift does not produce the same results
我正在針對一個補充類(名為Matrix)的User類中編寫一個友誼關系。 目標是為每個朋友提供其他信息。
案例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是從列表中拾取的
情況2:解析具有意外關系的Cloud代碼結果。 僅插入一個關系。
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")
}
}
}
任何幫助表示贊賞。
我已經解決了我的問題,而沒有為每個請求設置“ 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"
}
}
因此,我已使用2個參數“ fromId”和“ toId”更改了函數API,可在任何調用時查詢。
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!)
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.