2014-12-28 4 views
-1

내 프로그램에서 사람들이 나를 따라 오면 친구가됩니다. 나는 친구들을 사려고하고있어. 나는 다음과 같은 함수를 사용하고 올바른 수의 사용자를 설정하지만 모두 똑같은 이름입니다. 어떤 아이디어?구문 분석 및 자바 스크립트를 사용하여 친구 찾기

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(); 

     } 
    }); 
} 
+0

가능한 중복 [자바 스크립트 폐쇄 내부 루프 - 간단한 실제적인 예] (http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example) –

답변

1

귀하의 문제는 같은 success 콜백 관계 quired되고있는 사용자에게 액세스 권한을 가지고 있지 않기 때문에 relation2.query().find() 비동기 기능을 것입니다.

즉시 피할 수있는 함수 식을 사용하여 사용자를 성공 콜백에 명시 적으로 전달할 수 있습니다.

answer 내가 그것을 테스트하지 못할 문제

을 설명하는 훌륭한 일을하지만, 아래 당신을 위해 작동합니다 :

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(); 

     } 
    }); 
} 
+0

personTheyFollow.getUsername()은 내 사용자 이름 일뿐입니다. 그게 내가 원하는게 아니야 –

+0

다시 메신저 다시 찾고, 내가 뭔가를 missunderstood – DelightedD0D

+0

@ BrentUnderwood 업데이트 – DelightedD0D

관련 문제