2014-04-19 7 views
0

정수 (42)를 사용하여 여러 시간과 응답을 요구하는 데이터베이스 요청을 시작하려고합니다. setTimeout (dbRequest())이이 요청을 대표합니다.비동기 함수 호출

응답 된 정수는 initRequest 함수에서 1 씩 증가해야합니다. 따라서 initRequest43을 반환해야합니다. 불행하게도 var test = cb() + 1;

var dbRequest = function() { 

    setTimeout(function(){ 
    console.log('Hello World! => 42'); 
    return 42; 
    }, 5000); 

}; 

var initRequest = function (cb){ 
    var test = cb() + 1; 
    console.log('Incremented Value: ' + test); 
    return test; 
}; 

initRequest(dbRequest); 

setTimeout 기다리고 NaN으로 계산되지 않습니다. 출력 :

Incremented Value: NaN 
// 5 sec delay 
Hello World! => 42 

가 어떻게이 기능 비동기를 만들 수 있도록 dbRequest 응답 initRequest 대기?

+1

거꾸로하는 것 같습니다. 비동기 함수 인 _is_은 대기하지 않는다는 것을 의미합니다. – Barmar

+1

비동기 작업의 결과에 의존하는 모든 것은 콜백 함수에서 수행되어야합니다. Javascript는 단일 스레드이며 원래 기능을 유지할 수없고 동시에 비동기 호출을 실행할 수 없습니다. – Barmar

+0

기본적으로 같은 문제가 있습니다 : http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax-call 그 질문은'setTimeout' 대신'AJAX' 요청을 다루고 있습니다. ,하지만 비동기 문제 –

답변

2

정확하게 귀하의 사례에 대해 모르겠지만 욕망 결과를 얻으려면 이와 같이 할 수 있습니다.

var dbRequest = function (callback) { 
    setTimeout(function(){ 
     console.log('Hello World! => 42'); 
     callback(42); 
    }, 5000); 
}; 

function initRequest(val){ 
    var test = val + 1; 
    console.log('Incremented Value: ' + test); 
} 

dbRequest(initRequest); 

특정 시간 후에 콜백 함수를 호출하고 원하는 동작을 위해이 호출 된 함수에 값을 전달하십시오.