2017-01-06 3 views
-1

내 console.log (url)이 매번 같은 결과를 반환하지만 json 호출 외부에서 콘솔을 처리하면 모든 것이 잘 작동합니다. 왜 그런데 어떻게 고칠 수 있니? Json이 호출하기 전에 for 루프가 세고있다. for 루프는 댓글 0내 루프가 내 getJson 호출 내에서 작동하지 않습니다.

$(document).ready(function(){ 
    var channels = ["ESL_SC2", "OgamingSC2", "cretetion", "freecodecamp", "storbeck", "habathcx","RobotCaleb","noobs2ninjas"]; 
    for(var i = 0;i<channels.length;i++){ 
     var url='https://api.twitch.tv/kraken/channels/'+channels[i]+'?client_id=pd57d4ktf8rjarn9q3qgtv4owbr5q0'; 
     console.log(url); 
     $.getJSON(url,function(data){ 
      console.log(url);  
     }); 
}}); 
+0

당신은 분명히 확인하시기 바랍니다 수 있습니까? 예상대로 작동하고 있습니다. 너는 무엇을 기대하고 있니? –

+0

이것이 http://stackoverflow.com/questions/111102/how-do-javascript-closures-work/111111#111111 – Blorgbeard

+0

의 중복으로 간주 될 수 있습니다. Json이 전화를 걸기 전에 for 루프가 계산됩니다. 예를 들어 내가 Json 내부에서 콘솔을 할 때 숫자 8, 8 번을 반환하지만 json 외부에서 i 콘솔을 처리하지만 for 루프 내부에서는 0에서 7을 반환합니다. –

답변

0

7에 두 개의 링크를 반환 안에 예를 들어 내가 그것을 숫자 8, 8 배를 반환하는 JSON 내부의 난 콘솔 때하지만 난 내가 외부 드 JSON 콘솔 경우 만 왜 이런 일이 발생했는지 이유를 설명하십시오. 그러나 구체적인 이유는 getJSON 호출이 비동기 적이기 때문입니다. getJSON에 전달 된 콜백이 실행되기 전에 루프가 완료됩니다. 콜백 외부의 console.log이 예상 한 것이지만 콜백 내부의 동일 끝 상태는 8 번 로그 아웃됩니다.

다음 스 니펫을 통해 어떤 일이 일어나고 있는지 명확하게 알 수 있습니다. "In loop"행이 "In callback"행 앞에 어떻게 나타나는지주의하십시오.

for(var i = 0; i < 5; i++) { 
 
    console.log("In loop", i); 
 
    
 
    // Simulate an asynchronous request 
 
    setTimeout(function() { 
 
    /* 
 
     By the time this executes, i has been incremented 
 
     to 5 so the loop is finished. 
 
    */ 
 
    console.log("In callback", i); 
 
    }, 1); 
 
}

관련 문제