2011-09-11 7 views
3
코드의 다음 블록이 성공적으로 배열 값을 반환

(제 1 130879253000, 34756) 코드의 다음 섹션에서JavaScript 기능이 배열에 채워지지 않는 이유는 무엇입니까?

function getCsv(file_name){ 
     var array_holder = []; 
     $.get(file_name, function(csv, state, xhr) { 

      // inconsistency 
      if (typeof csv != 'string') { 
       csv = xhr.responseText; 
      } 

      // parse the CSV trades 
      var header, comment = /^#/, x; 

      $.each(csv.split('\n'), function(i, line){ 
       if (!comment.test(line)) { 
        if (!header) { 
         header = line; 
        } 
        else { 
         var point = line.split(';'), 
          date = point[0].split('-'), 
          time = point[1].split(':'); 

         if (point.length > 1) { 
          x = Date.UTC(date[2], date[1] - 1, date[0], time[2], time[1], time[0]); 

          array_holder.push([ 
           x, // time 
           parseFloat(point[2]) // close 
          ]); 
         } 
        } 
       } 

      }); // each 
      alert('No. 1' + array_holder[0]); 
     }); 
     return array_holder; 
    } 

, 나는 getCsv를 호출하기 위해 노력하고있어하지만 난 정의되지 않은 제 2

를 얻을 수
$(function() { 

     var trades = getCsv('trades.csv'); 
     var spreads = getCsv('spreads.csv'); 
     alert('No. 2' + trades[0]); 
} 

배열이 채워지지 않는 이유는 무엇입니까? 실제 코드에서 위의 두 함수가 여기에 나열된 순서대로 서로 바로 옆에 있습니다. 그래서 파일이 올바르게 읽혀지고있는 것처럼 보입니다. array_holder가 범위를 벗어나서 가비지 수집을받는 것처럼 말입니다.

+0

당신이 당신의 CSV 문자열/파일을 게시 할 수 또는 [JSFiddle] (http://www.jsfiddle.net) 위의 JS를 사용하여 CSV합니다 솔루션을 얻기 위해이 토론의 답변을 참조하십시오 본문? – Bojangles

+0

CSV가 필요하지 않습니다. 비동기 대 동기화 문제입니다. – epascarello

답변

9

이것은 비동기 특성 인 $.get()이 원인입니다. 경고를하는 지점에서 AJAX 요청이 반드시 실행되지는 않습니다.

"No.1"경고가 발생하는 요청의 성공 콜백에서 경고를 보냅니다.

관련 문제