Parse.com从其他类Cloud Code中的子查询中获取用户

时间:2015-06-11 18:34:04

标签: javascript parse-platform cloud-code pfobject pfuser

我有课堂上的朋友:

Class Friends{
   "from" : Pointer(_User)
   "to" : Pointer(_User)
   "allowSee" : Boolean
   "block" : Boolean
   "createdAt" : Date
   "updatedAt" : Date
}

我有一个Parse.Query,我得到了我的朋友,但这是Class Friends而不是class User。我尝试做一个cicle来获取el field"来自"但是数组用户返回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();
});

是否存在通过objectIds数组获取用户的方法?例如:

var from =["f8dfg3","32fsg5s","43t4gsd"];
var arrUsers = getUser(from); // return array of PFUser with objectId in array from

谢谢,

1 个答案:

答案 0 :(得分:0)

因为您的Friends类会保留指向用户的指针,所以只需一步即可热切地获取相关用户。在运行查询之前,请添加:

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()建议,但在某些时候您可能需要按照原始邮政编码尝试的方式查询结果块中的相关对象。 OP代码在那里犯了两个错误:(1)你只能fetch(result.get("from")),对象 - 不需要提取objectId并像你一样调用get()first()。 (2)所有那些刚刚命名的函数都是异步的。启动它们的循环将在其中任何一个开始之前终止,因此行return users;将不会返回任何内容。正确的方法是使用fetch() - 返回的promises填充数组,然后从Parse.Promise.when(fetchPromises);

返回新的承诺