2013-06-18 3 views
-1

함수 "성공"내에서 변수 "k"의 값에 액세스 할 수 없지만 그 바깥쪽에 올바른 값을 표시하고 배열의 내용이 내부에 유지되지 않습니다. 같은 기능.함수 내부의 변수 값이 올바르지 않습니다.

로그의 k 값은 항상 FOR 루프의 조건 인 nArray.length와 같습니다.

Parse.com의 클라우드 코드에 문제가 있습니까? 아니면 내 코드에 문제가 있습니까?

읽어 주셔서 감사합니다.

nArray = gameScore.get("myArray"); 
var query2 = new Parse.Query("User");  
for (var k=1; k < nArray.length; k++) { 
    query2.equalTo("username", nArray[k]); 
    query2.find({ 
    success: function(results) { 
     if (results.length !== 0) { 
     **alert("The value of k is" + k);** //the value of k here always is equal to the total # of loops 
     var object = results[0]; 
     alert(object.id + ' - ' + object.get('email')); 
     var ema = object.get('email'); 
     mArray.push(ema); 
     alert("Matched Contacts:" + mArray.length); 
     } 
    }, 
    error: function() { 
     response.error("movie lookup failed"); 
    } 
    }); 
    alert(mArray.join('\n')); 
    alert("The value of k at bottom is correct" + k); 
}; 

답변

2

문제는 루프가 너무 k 마지막 반복의 값을 갖는 끝난 findk를 얻을 수 있다는 것입니다. 당신은 그렇지 않으면 당신이보고 행동을 설명 할 수 없다, 내가 find의 매개 변수는 비동기 실행 콜백 있다고 믿고있어이

nArray = gameScore.get("myArray"); 
var query2 = new Parse.Query("User"); 

for (var k=1; k < nArray.length; k++) 
{ 
    (function(k){ // <-- define an inline function 
     query2.equalTo("username", nArray[k]); 
     query2.find({ 
      success: function(results) { 

       if (results.length !== 0) 
       { 
         alert("The value of k is" + k); 
         var object = results[0]; 
         alert(object.id + ' - ' + object.get('email')); 
         var ema = object.get('email'); 
         mArray.push(ema); 
         alert("Matched Contacts:" + mArray.length); 

       } 
      }, 
      error: function() { 
       response.error("movie lookup failed"); 
      } 
     }); 
    })(k); // <-- call it after definition using (k) 
    alert(mArray.join('\n')); 
    alert("The value of k at bottom is correct" + k); 
}; 

같은 폐쇄를 사용할 수 있습니다.

이 경우 mArray.join('\n')이 예상대로 작동하지 않는다는 점을 고려하십시오.

+0

예. 그렇다면 mArray.join ('\ n')이 올바르게 작동하려면 어떻게해야합니까? –

+0

클라우디오 고마워요! –

관련 문제