2015-02-05 2 views
0

Как получить переменную из функции async?Как получить переменную из функции aysnc

У меня есть следующее, и я хотел бы получить переменную httpsResp из этой функции async.

 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. Для теста это обычно означает утверждения, которые ваш код уже делает.