2015-02-05 3 views
0

변수를 비동기 함수에서 가져 오는 방법은 무엇입니까?aysnc 함수에서 변수를 가져 오는 방법

다음과 같은 사항이 있으며이 비동기 함수에서 httpsResp 변수를 얻고 싶습니다.

 var httpsResp; 
     var dfd = this.async(10000); 

     var httpsReq = https.request(httpOptions, dfd.callback(function (resp) { 
      httpsResp = resp.statusCode; 
      assert.strictEqual(httpsResp, correctResp, error.incorrectResp); 
     }), dfd.reject.bind(dfd)); 
     httpsReq.end(); 
     httpsReq.on('error', function(e) { 
      console.error(e); 
     }); 
     console.info('Status Code: ' + httpsResp); 

현재 httpsResp는 정의되지 않은 것으로 표시됩니다.

+0

[내 변수가 함수 내부에서 수정 된 후에도 변수가 변경되지 않는 이유는 무엇입니까? - 비동기 코드 참조] (http://stackoverflow.com/questions/23667086/why-is-my-variable-unaltered-after-i-modify-it-inside-of-a-function-asynchron) – Barmar

답변

0

@Barmar가 지적했듯이 기본적인 질문은 이미 Why is my variable unaltered after I modify it inside of a function? - Asynchronous code reference에 나와 있습니다. https.request이 비동기이기 때문에 https.request에 대한 호출은 네트워크 요청을 시작하고 즉각적으로 반환합니다 (즉, 요청이 완료되기 전에). console.info에 대한 호출을 포함하여 함수의 나머지 명령문이 평가됩니다. JavaScript의 비동기 작업은 실행 함수를 인터럽트 할 수 없으므로 외부 함수가 반환 될 때까지 요청 콜백이 호출되지 않습니다.

이 상황을 처리하는 일반적인 방법은 비동기 콜백에 httpsResp의 값을 염려하는 코드를 넣는 것입니다. 테스트의 경우 이는 일반적으로 코드가 이미 수행하고있는 어설 션을 의미합니다.