2016-02-01 2 views
0

Так что я потратил кучу времени на написание какой-то код, как это:Что заставляет node.js ждать завершения запроса?

function processResponse(error, response, body) { 
    if (!error && response.statusCode == 200) { 
     console.log(body); 
    } else { 
     console.error(util.inspect(response, false, null)); 
    } 
    waiting = false; 
}; 

request.get(requestOpts.url, processResponse); 

console.log("Waiting"); 
while(waiting) { 
    count += 1; 
    if(count % 10000000 == 0) { 
     console.log(count); 
    } 
} 

Я пытался получить узел ждать (а не выход), пока réponse не вернулся из веб-сервера. Оказывается, это didnt 'работа, и что работа не делала ничего. Just:

request.get(requestOpts.url, processResponse); 

Как запрос удерживал узел от выхода во время ожидания обратного вызова?

+1

Асинхронный примитив, используемый 'request' (в' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'указывает, что узел не должен завершаться, когда есть обратный вызов, ожидающий результата. – Bergi

+0

Не могли бы вы рассказать об этом примитиве? – boatcoder

+0

Это родной. Он реализован во внутренних узлах платформы узлов. Он напрямую связан с циклом событий. Об этом не так много сказано. – Bergi

ответ

3

Узел всегда отслеживает любые ожидающие обратные вызовы и не выйдет, пока это не достигнет нуля. Это будет включать в себя все активные сетевые подключения/запросы, а также операции ввода-вывода файловой системы и подпроцесса. Для получения ожидаемого поведения ничего особенного вам не нужно кодировать. узел будет делать то, что вы ожидаете в этом случае по умолчанию.

Смежные вопросы