2011-01-18 4 views
1

초기화 할 때 JSON 파일을 다운로드하기 시작한 클래스를 만들었습니다.자바 스크립트에서 코드 조각을 대기열에 넣는 방법

그러나 다운로드는 비동기 적으로 실행됩니다. 그래서 선언 한 후에는 작업을 시작하지만 아직 파일을로드하지 않았기 때문에 실패합니다.

비동기를 해제 할 수 있지만 브라우저를 정지하지 않고 다른 방법이 있습니까?

현재 setTimeout 옵션을 사용하여 작업하고 있지만 추한 해킹처럼 보입니다.

var d; 
    $(document).ready(function() { 
     d = new Duk('element'); 
     d.getBlueprint('hud.json'); 
     setTimeout(start, '2000'); 
    }); 

    function start(){ 
     test = new d.Dialog(d.blueprint.screens.test); 
     test.draw(); 
    } 
+0

왜 'setTimeout'의 두 번째 인수로 문자열을 전달합니까? 분명히 숫자로 강제 변환 될 것이지만, 처음에는 숫자 리터럴을 사용하지 않는 것이 좋을까요? –

+0

어떤 라이브러리를 사용하고 있습니까? 'Duk' 란 무엇이고'getBlueprint()'는 무엇을합니까? –

답변

0

타임 아웃은이 문제를 해결할 방법이 아닙니다.

당신은 요청을 처리하는 객체는 응답이 들어 오면 무엇을 알 수 있도록 요청과 함께 콜백 함수를 설정하려면이.

그것은 당신이 사용중인 프레임 워크 코드에서 불분명하다 (I getBlueprint을 만들 수 없으므로 원격 요청을 초기화하는 호출 인 것 같습니다. 이에 대한 자세한 정보를 제공 할 수 있다면 더 많은 맞춤식 도움말을 제공 할 수 있습니다.

1

개체로드 완료 이벤트에 이벤트 처리기를 연결해야합니다. 함께 작업하는 라이브러리는이 이벤트를 제공해야합니다. Duk이 무엇인지, 또는 무엇이 getBlueprint()인지는 모르지만, 해당 클래스와 메소드가 무엇인지에 대한 문서를 확인하고 완료되지 않은 콜백이 있는지 확인해야합니다. 있을 경우 다음과 같은 작업을 수행 할 수 있습니다.

$(document).ready(function() { 
    d = new Duk('element'); 
    d.getBlueprint('hud.json', { 
     onComplete: function() { 
      test = new d.Dialog(d.blueprint.screens.test); 
      test.draw(); 
     } 
    }); 
}); 

분명히, 나는 그걸 만들었습니다. 라이브러리에 onComplete 메소드가 이와 같이 정의되어 있는지 여부는 알 수 없지만 내 뜻을 알기를 바랍니다. 당신이 사용하고있는 라이브러리에 대해 더 많이 알지 못한다면 더 좋은 예를들 수 없습니다.

+0

+1 : getBluePrint는 콜백을 허용해야합니다. –

0

getBlueprint() 메소드는 파일 다운로드가 완료 될 때 실행되는 콜백을 허용 할 수 있습니다.

function getBlueprint(file, callback) 
{ 
    // do whatever to get the file 
    // ... 
    // trigger the callback 
    callback(); 
} 

$(document).ready(function() { 
    var d; 
    function start(){ 
     test = new d.Dialog(d.blueprint.screens.test); 
     test.draw(); 
    } 
    d = new Duk('element'); 
    d.getBlueprint('hud.json', start); 
    setTimeout(start, '2000'); 
}); 
0

나는 콜백 함수가 적절한 방법임을 동의합니다. 이 코드를 수정할 수 없다면 다음과 같이 할 수 있지만 심각하게는 콜백을 사용하십시오!

function wait_for_load(expr, func) 
{ 
    var interval = window.setInterval(function() 
    { 
     if(eval(expr)) 
     { 
      window.clearInterval(interval); 
      func(); 
     } 
    }, 20); 
} 

var d; 
$(document).ready(function() { 
    d = new Duk('element'); 
    d.getBlueprint('hud.json'); 
    wait_for_load('d.blueprint', start); 
}); 
관련 문제