javascript - parse.com 使用 Javascript 多对多获取指针 ID 列表

标签 javascript pointers parse-platform many-to-many

我在 parse.com 上遇到多对多关系问题。

首先,我有两个类(Groups 和 Users)和一个类(UserInGroup)来实现 m-to-m 关系。

类结构:

群组: objectId(string) -- GroupName(string) -- ...

用户: objectId(string) -- 用户名(string) -- ...

组内用户: objectId(string) -- 组(指针<组>) -- 用户(指针<用户>)

如何获取特定组中所有用户的用户名(我知道该组的 objectId)。

我试过了

function getUserNameOfGroup(GroupID){
    var UserInGroup = Parse.Object.extend("UserInGroup");
    var query = new Parse.Query(UserInGroup);
    var usersArray = [];

    var Groups = Parse.Object.extend("Groups");
    var collectionQuery = new Parse.Query(Groups);
    collectionQuery.get(GroupID, {
        success: function(group) {
            query.equalTo("Group", group);
            var usersArray = [];
            query.find({
                success: function(results) {
                    for (var i = 0; i < results.length; i++) { 
                        var object = results[i];

                        var user = object.get("User");
                        user.fetch({
                          success: function(tempUser) {
                                usersArray.push(user.get("UserName"));
                          }
                        }).done(function() {
                            if(results.length == usersArray.length){

                                //do something with the array
                            }
                        });
                    }
                },
                error: function(error) {
                    alert("Error: " + error.code + " " + error.message);
                }
            });
        },
        error: function(object, error) {
            alert("Error: " + error.code + " " + error.message);
        }
    });
}

为了测试我放了

if(results.length == usersArray.length){
    for (var i = 0; i < usersArray.length; i++) { 
        alert(usersArray[i]);
    }
}

在完成部分。 usersArray 的第一个条目始终是“undefinde”。

我做错了什么?或者更确切地说,有没有一种更简单、更美观、更快捷的方式来获取数组呢?我确信有更好的解决方案;)。

感谢您的帮助。

最佳答案

无需对 UserInGroup 的 User 属性进行额外的查询。可以使用 include() 急切地获取这些内容,如下所示:

// return a promise that is fulfilled with an array of users belonging to
// the Group with id groupId
function usersInGroup(groupId) {
    var groupQuery = new Parse.Query("Groups");
    return groupQuery.get(groupId).then(function(group) {
        var userInGroupQuery = new Parse.Query("UserInGroup");
        userInGroupQuery.equalTo("Group", group);
        // eagerly fetch the related user...
        userInGroupQuery.include("User");
        return userInGroupQuery.find();
    }).then(function(results) {
        var users = [];
        for (var i = 0; i < results.length; i++) { 
            var object = results[i];
            users.push(object.get("User"));
        }
        return users;
    });
}

这样调用它:

usersInGroup(someGroupId).then(function(users) {
    for (var i = 0; i < users.length; i++) { 
        var user = users[i];
        console.log(user.getUserName());  // or get("username")
    }
}, function(error) {
    console.log(error);
});

关于javascript - parse.com 使用 Javascript 多对多获取指针 ID 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30196653/

相关文章:

c - 使用 CUDA 内核获取堆栈溢出

使用指针在函数内调用函数 - C

ios - 为什么不向客户收费?

iOS/Swift/Parse - 结构不存储数据

javascript - ASP.NET:如何使 onClientClick 在回发之前完成工作?

javascript - NodeJS : invalid array length Allocation failed - JavaScript heap out of memory

c++ - 将指针字符串转换为整数

javascript - 使用 iOS 11 在 safari 中强制打开链接

javascript - float 条形图数据转换

javascript - Parse.com CloudCode 将用户添加到现有角色不起作用