parse.com 多对多获取指针 ID 列表 Javascript

parse.com many-to-many get list of Pointer ID with Javascript

我对 parse.com 上的多对多关系有疑问。

首先我有两个classes(组和用户)和一个class(UserInGroup)来实现m-to-m关系。

Class结构:

群组: objectId(字符串) -- GroupName(字符串) -- ...

用户: objectId(字符串) -- 用户名(字符串) -- ...

用户组内: objectId(string) -- Group(Pointer< Groups>) -- User(Pointer< Users>)

如何获取特定组中所有用户的用户名(我知道组的 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 的用户属性进行额外查询。这些可以使用 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);
});