【问题标题】:parse.com many-to-many get list of Pointer ID with Javascriptparse.com 使用 Javascript 多对多获取指针 ID 列表
【发布时间】:2015-05-13 01:45:09
【问题描述】:

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

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

类结构:

组: objectId(string) -- 组名(string) -- ...

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

用户组: objectId(string) -- Group(Pointer) -- User(Pointer)

如何获取特定组中所有用户的用户名(我知道组的 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 的第一个条目总是“未定义”。

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

感谢您的帮助。

【问题讨论】:

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


    【解决方案1】:

    无需对 UserInGroup 的用户属性进行额外查询。这些可以使用 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);
    });
    

    【讨论】:

    • 感谢您在更正通话中的错误后可以正常工作
    • 很高兴为您提供帮助。抱歉,循环中的复制粘贴错误。会修复。但我认为 getUsername() 是获取用户用户名的正确方法。或者 .get("username") 都适用于所有小写。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-28
    • 1970-01-01
    • 2015-03-10
    相关资源
    最近更新 更多