2017-03-10 1 views
0

jQuery를 사용하여 .txt 파일의 행을 기반으로 배열을 만들려고합니다. 배열은 게임에 대한 답변 목록입니다.전역 변수가 함수 내에서 값을 할당 할 때 업데이트되지 않습니다.

콘솔에서 내용이 처음에는 배열이지만 두 번째에는 빈 배열을 로깅합니다. answers이 전 세계적으로 업데이트되지 않는 이유는 무엇입니까? 콜백 밖의 console.log(answers);이 할당하기 전에 을 발생

//create global variable answers 
var answers = new Array; 
//assign a value to answers from text file 
$.get("wordsEn.txt", function(txt){ 
    answers = txt.split('\n'); 
    console.log(answers); 
}); 
console.log(answers); 
+4

함수 호출은 동 기적으로 발생하지 않으므로 로그 할 때 아직 업데이트되지 않았습니다. –

+0

실제로, 처음으로 빈 배열과 두 번째 시간에 내용을 기록 할 것입니다. – CaptainHere

답변

0

당신은 그렇게 하나의 문제는 하나의 기적으로 발생하고 있기 때문에 하나가 먼저 발생 알 수 없다는 것입니다, 당신은 console.log 두 통화를

//create global variable answers 
var answers = new Array; 
var cb = function(){ 
    console.log(answers); 
}; 
//assign a value to answers from text file 
$.get("wordsEn.txt", function(txt){ 
    answers = txt.split('\n'); 
    console.log(answers); 
    if(cb) 
     cb(); 
}); 
+0

'console.log()'는 내가하고 싶은 모든 것이 아니기 때문에 (그 변수의 생성을 바탕으로 한 전체 게임이 있습니다) 어떻게해야합니까? 다음 코드를'$ .get()'함수 안에 넣어야합니까? – wpbdry

+0

예, 모든 코드를 $ .get()에 넣거나 함수를 호출해야합니다. –

0

:

여기 내 코드입니다.

$.get 즉시 반환되지만 콜백이 반드시 실행되지는 않습니다. 데이터를 가져 오는 데 약간의 시간이 걸릴 수 있습니다. 그동안 외부 번호 console.log(answers);이 실행됩니다.

0

같은 동 기적으로 작동 뭔가를해야만 INSITE 함수를 호출하는 데 필요한 다른 비동기 적으로. 이 같은 디버깅 할 경우 우선, 당신은 당신의 로그 문에 몇 가지 추가 정보를 넣어해야합니다

console.log('1: ' + answers); 
console.log('2: ' + answers); 

그 방법을 당신이 먼저 발생, 또는 1이 먼저 발생하면 출력이 당신이 알고있는 것 볼 때. 다른 사람들처럼

당신이 알 수있는 방법이 없다, 그것은 때로는 빠르게 또는 느리게 될 수 아약스 요청이 완료 후 를 실행 의미는 $.get 코드에 사용 된 내부 함수가 비동기 적으로 발생, 말했다.

관련 문제