使用解析和JavaScript查找朋友 [英] Using parse and javascript to find friends

查看:75
本文介绍了使用解析和JavaScript查找朋友的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的程序中,如果人们跟随您,您就是朋友.我想和我的朋友们在一起.我使用以下功能,它可以设置正确的用户数,但是它们都被命名为同一事物.有什么想法吗?

function getMyFriends() {

    var relation = Parse.User.current().relation("peopleIFollow");
    relation.query().find({
    success: function(results) {
        // results is an array of Parse.Object
        var myFriendsArrayTemp=[];
        while(document.getElementById("datalist").hasChildNodes() )    {
        document.getElementById("datalist").removeChild(document.getElementById("datalist").lastChild);
                }
        for (i = 0; i < results.length; i++)    {
            var user=results[i]
            // console.log(user.getUsername())
            var relation2 = user.relation("peopleIFollow");
            // console.log(relation2)
            relation2.query().find({
            success: function(theirfriends) {
                // results is an array of Parse.Object



                for (z = 0; z < theirfriends.length; z++)   {
                    var personTheyFollow=theirfriends[z];

                    if ( personTheyFollow.getUsername() == Parse.User.current().getUsername() ) {
                        myFriendsArrayTemp.push(user.getUsername())
                        console.log(user.getUsername())
                        var datalist=document.getElementById("datalist")
                        var option=document.createElement('option')
                        option.value=user.get("name");
                        datalist.appendChild(option)
                    }
                }

            }, error: function(error) {
                // error is an instance of Parse.Error.
                refreshTimedOut();

                }
            });

        }
        console.log("****")
        console.log(myFriendsArrayTemp);
        console.log("****")


    }, error: function(error) {
        // error is an instance of Parse.Error.
         refreshTimedOut();

        }
    });
}

解决方案

您的问题是relation2.query().find()是一个异步函数,因此success回调无法访问需要其关系的用户.

为避免这种情况,您可以使用立即调用的函数表达式将用户显式传递给成功回调.

答案很好地解释了这个问题

我无法对其进行测试,但以下内容应该可以为您工作:

 function getMyFriends() {
    // query all the people I follow
    var relation = Parse.User.current().relation("peopleIFollow");
    relation.query().find({
    success: function(results) {

        //create an array to hold all confirmed friends
        var myFriendsArrayTemp=[];

      //clear some on page display
        while(document.getElementById("datalist").hasChildNodes() ){
            document.getElementById("datalist").removeChild(document.getElementById("datalist").lastChild);
        }

        // loop through each of the people I follow
        for (i = 0; i < results.length; i++){

            var followedUser=results[i] //use a more unique var for this than `user`
            var relation2 = followedUser.relation("peopleIFollow");
            //get all the people this user follows
            relation2.query().find({


              success: (function(followedUser) { // IIFE
                  return function(results) {

                    //loop through the people they follow to see if in in that list
                    for (z = 0; z < theirfriends.length; z++)   {

                        var personTheyFollow=theirfriends[z];
                        if ( personTheyFollow.getUsername() == Parse.User.current().getUsername() ) {
                            // im in their list, friendship confirmed set some stuff
                            myFriendsArrayTemp.push(followedUser.getUsername())
                            console.log(followedUser.getUsername())
                            var datalist=document.getElementById("datalist")
                            var option=document.createElement('option')
                            option.value=user.get("name");
                            datalist.appendChild(option)
                        }
                    }
                  }
              })(followedUser),
              error: function(error) {
                // error is an instance of Parse.Error.
                refreshTimedOut();

                }
            });

        }
        console.log("****")
        console.log(myFriendsArrayTemp);
        console.log("****")


    }, error: function(error) {
        // error is an instance of Parse.Error.
         refreshTimedOut();

        }
    });
}

In my program, if people follow you back you are friends. I'm trying to get my friends. I use the following function, and it sets up the correct number of users but they're all named the same thing. Any ideas?

function getMyFriends() {

    var relation = Parse.User.current().relation("peopleIFollow");
    relation.query().find({
    success: function(results) {
        // results is an array of Parse.Object
        var myFriendsArrayTemp=[];
        while(document.getElementById("datalist").hasChildNodes() )    {
        document.getElementById("datalist").removeChild(document.getElementById("datalist").lastChild);
                }
        for (i = 0; i < results.length; i++)    {
            var user=results[i]
            // console.log(user.getUsername())
            var relation2 = user.relation("peopleIFollow");
            // console.log(relation2)
            relation2.query().find({
            success: function(theirfriends) {
                // results is an array of Parse.Object



                for (z = 0; z < theirfriends.length; z++)   {
                    var personTheyFollow=theirfriends[z];

                    if ( personTheyFollow.getUsername() == Parse.User.current().getUsername() ) {
                        myFriendsArrayTemp.push(user.getUsername())
                        console.log(user.getUsername())
                        var datalist=document.getElementById("datalist")
                        var option=document.createElement('option')
                        option.value=user.get("name");
                        datalist.appendChild(option)
                    }
                }

            }, error: function(error) {
                // error is an instance of Parse.Error.
                refreshTimedOut();

                }
            });

        }
        console.log("****")
        console.log(myFriendsArrayTemp);
        console.log("****")


    }, error: function(error) {
        // error is an instance of Parse.Error.
         refreshTimedOut();

        }
    });
}

解决方案

Your problem is that relation2.query().find() is an asynchronous function as such the success callback does not have access to the user whose relations are being quired.

To avoid this you can use an immediately invoked function expression to explicitly pass the user to the success callback.

This answer does a great job of explaining the issue

I cant test it, but the below should work for you:

 function getMyFriends() {
    // query all the people I follow
    var relation = Parse.User.current().relation("peopleIFollow");
    relation.query().find({
    success: function(results) {

        //create an array to hold all confirmed friends
        var myFriendsArrayTemp=[];

      //clear some on page display
        while(document.getElementById("datalist").hasChildNodes() ){
            document.getElementById("datalist").removeChild(document.getElementById("datalist").lastChild);
        }

        // loop through each of the people I follow
        for (i = 0; i < results.length; i++){

            var followedUser=results[i] //use a more unique var for this than `user`
            var relation2 = followedUser.relation("peopleIFollow");
            //get all the people this user follows
            relation2.query().find({


              success: (function(followedUser) { // IIFE
                  return function(results) {

                    //loop through the people they follow to see if in in that list
                    for (z = 0; z < theirfriends.length; z++)   {

                        var personTheyFollow=theirfriends[z];
                        if ( personTheyFollow.getUsername() == Parse.User.current().getUsername() ) {
                            // im in their list, friendship confirmed set some stuff
                            myFriendsArrayTemp.push(followedUser.getUsername())
                            console.log(followedUser.getUsername())
                            var datalist=document.getElementById("datalist")
                            var option=document.createElement('option')
                            option.value=user.get("name");
                            datalist.appendChild(option)
                        }
                    }
                  }
              })(followedUser),
              error: function(error) {
                // error is an instance of Parse.Error.
                refreshTimedOut();

                }
            });

        }
        console.log("****")
        console.log(myFriendsArrayTemp);
        console.log("****")


    }, error: function(error) {
        // error is an instance of Parse.Error.
         refreshTimedOut();

        }
    });
}

这篇关于使用解析和JavaScript查找朋友的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆