2010-03-10 5 views
2

일정한 시간이 지나면 함수를 반환하고 싶습니다. 아래 함수에서 리턴 값이 작동하지 않았습니다 (경고가 트리거되었습니다).자바 스크립트에서 프로세서를 죽이지 않고 구현 지연

문제는 내 입니다. handleRequestStateChange myArray를 초기화합니다.

function() {  
    xmlHttp.open("POST", "xxx", true); 
    xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
    xmlHttp.setRequestHeader("Content-Length", 10); 
    xmlHttp.onreadystatechange = handleRequestStateChange; 
    xmlHttp.send(locParam); 

    setTimeout(function() { return myArray; }, 5000); 
    alert("end sleep"); 
} 

고마워요!

+0

실제로 여기 첫 번째 기능에서 반환하지 않습니다. 당신은 내적인 기능에서 돌아오고 있습니다, 그래서 그것은 첫 번째 것에서 돌아 오지 않습니다. – Pavunkumar

+0

예, 알고 있습니다 만 원래 함수를 어떻게 반환합니까? –

답변

2

알다시피 타이머는 스레드의 뒷부분까지 지연되지만 타이머를 호출하는 함수는 즉시 실행됩니다. 브라우저를 잠그지 않고 브라우저와의 사용자 상호 작용을 방지하지 않고 현재 실행중인 기능을 지연시킬 수있는 방법이 없습니다.

여기가 콜백의 핵심입니다. 코드의 계속 실행을 지연시키지 않고 함수를 "지연"함수의 매개 변수로 제공하고 필요한 데이터가 준비되면 데이터를 매개 변수로 사용하여 콜백 함수를 실행합니다.

function submitRequest(callback) {  
    xmlHttp.open("POST", "xxx", true); 
    xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
    xmlHttp.setRequestHeader("Content-Length", 10); 
    xmlHttp.onreadystatechange = function() 
    { 
    if (xmlHttp.readyState == 4 && xml.status == 200) 
    { 
     var myArray; 
     // do something with data 
     callback(myArray); // execute the callback function 
    } 
    }; 
    xmlHttp.send(locParam); 
} 

function someCallingFunction() 
{ 
    // call submitRequest with an anonymous function as the callback parameter 
    submitRequest(function (myArray) 
    { 
    alert("end sleep"); 
    // do something with myArray 
    }); 
} 
0

특정 시간 동안 잠자기를 넣은 다음 잠자기 후 return 문을 넣을 수 있습니다.

약간의 시간이 지나면 함수에서 반환됩니다.

+0

예,하지만 sleep은 프로세서를 죽입니다 (비동기식 동작 임). 그래서 setTimeout 가야합니다. –

관련 문제