Parse.com 从其他 class Cloud Code 的子查询中获取用户
Parse.com get users from subquery in other class Cloud Code
我在 Parse 上有 class 个朋友:
Class Friends{
"from" : Pointer(_User)
"to" : Pointer(_User)
"allowSee" : Boolean
"block" : Boolean
"createdAt" : Date
"updatedAt" : Date
}
我有一个 Parse.Query 可以找到我的朋友,但这是 Class 朋友而不是 class 用户。我尝试做一个 cicle 来获取 el 字段 "from" 中的用户,但是数组用户 return void
var user = Parse.User.current();
var me = {__type: 'Pointer',className: '_User', objectId: user.id}
var qFriends = new Parse.Query("Friends");
qFriends.equalTo("to", me);
qFriends.equalTo("allowSee", true);
qFriends.find().then(function(results){
for (i = 0; i < results.length; i++) {
var uFriendId = results[i].get("from").id;
var getUserById = new Parse.Query("_User");
getUserById.equalTo("objectId", uFriendId);
getUserById.first({
success: function(user) {
users.push(user);
},
error: function(error){
console.log(error);
}
})
}
return users;
}).then(function(friends){
response.success(friends);
}, function(error){
response.error();
});
是否存在通过 objectId 数组获取用户的方法?示例:
var from =["f8dfg3","32fsg5s","43t4gsd"];
var arrUsers = getUser(from); // return array of PFUser with objectId in array from
谢谢,
因为您的朋友 class 保留指向用户的指针,所以有一个很好的方法,只需一步,就可以急切地获取相关用户。在运行查询之前,添加:
qFriends.include("from");
qFriends.include("to");
完成后会获取相关用户,可以通过以下方式获取:
qFriends.find().then(function(results){
for (i = 0; i < results.length; i++) {
var friend = results[i];
var fromUser = friend.get("from");
var toUser = friend.get("to");
// these will be fetched, so you can say things like:
console.log(fromUser.username);
// and so on
顺便说一下,不需要从当前用户构建一个指针来限定查询,当前用户会做的很好,如下所示:
qFriends.equalTo("to", Parse.User.current());
此外,您的目标应该只包含上面的 include()
建议,但在某些时候您可能需要查询结果中的相关对象阻止原始 post 代码尝试的方式. OP 代码在那里犯了两个错误:(1) 您可以只 fetch(result.get("from"))
,对象——不需要提取 objectId 并像您那样调用 get()
或 first()
。 (2) 所有刚刚命名的函数都是异步的。启动它们的循环将在它们开始之前终止,因此行 return users;
必然 return 没有。正确的方法是用 fetch()
-returned promise 填充数组,然后 return 来自 Parse.Promise.when(fetchPromises);
的新 promise
我在 Parse 上有 class 个朋友:
Class Friends{
"from" : Pointer(_User)
"to" : Pointer(_User)
"allowSee" : Boolean
"block" : Boolean
"createdAt" : Date
"updatedAt" : Date
}
我有一个 Parse.Query 可以找到我的朋友,但这是 Class 朋友而不是 class 用户。我尝试做一个 cicle 来获取 el 字段 "from" 中的用户,但是数组用户 return void
var user = Parse.User.current();
var me = {__type: 'Pointer',className: '_User', objectId: user.id}
var qFriends = new Parse.Query("Friends");
qFriends.equalTo("to", me);
qFriends.equalTo("allowSee", true);
qFriends.find().then(function(results){
for (i = 0; i < results.length; i++) {
var uFriendId = results[i].get("from").id;
var getUserById = new Parse.Query("_User");
getUserById.equalTo("objectId", uFriendId);
getUserById.first({
success: function(user) {
users.push(user);
},
error: function(error){
console.log(error);
}
})
}
return users;
}).then(function(friends){
response.success(friends);
}, function(error){
response.error();
});
是否存在通过 objectId 数组获取用户的方法?示例:
var from =["f8dfg3","32fsg5s","43t4gsd"];
var arrUsers = getUser(from); // return array of PFUser with objectId in array from
谢谢,
因为您的朋友 class 保留指向用户的指针,所以有一个很好的方法,只需一步,就可以急切地获取相关用户。在运行查询之前,添加:
qFriends.include("from");
qFriends.include("to");
完成后会获取相关用户,可以通过以下方式获取:
qFriends.find().then(function(results){
for (i = 0; i < results.length; i++) {
var friend = results[i];
var fromUser = friend.get("from");
var toUser = friend.get("to");
// these will be fetched, so you can say things like:
console.log(fromUser.username);
// and so on
顺便说一下,不需要从当前用户构建一个指针来限定查询,当前用户会做的很好,如下所示:
qFriends.equalTo("to", Parse.User.current());
此外,您的目标应该只包含上面的 include()
建议,但在某些时候您可能需要查询结果中的相关对象阻止原始 post 代码尝试的方式. OP 代码在那里犯了两个错误:(1) 您可以只 fetch(result.get("from"))
,对象——不需要提取 objectId 并像您那样调用 get()
或 first()
。 (2) 所有刚刚命名的函数都是异步的。启动它们的循环将在它们开始之前终止,因此行 return users;
必然 return 没有。正确的方法是用 fetch()
-returned promise 填充数组,然后 return 来自 Parse.Promise.when(fetchPromises);