Гарантировано ли, что асинхронные запросы, сделанные в цикле, будут поставлены в очередь в порядке выполнения цикла?

Если я выполняю несколько асинхронных http-запросов в цикле for, является ли порядок добавления этих сокетов в цикл событий детерминированным/гарантированным в порядке выполнения цикла?

function makeRequest(n) {
  http.get("http://www.google.com/index.html?=" + n, function(res) {
    console.log("Got response: " + res.statusCode);
  }).on('error', function(e) {
    console.log("Got error: " + e.message);
  });
}

for (var i=0; i<10; i++) {
  makeRequest(i);
}

Я разговаривал с коллегой, и мы пытались выяснить, может ли это быть правдой. Поскольку цикл событий узла, libuv и программирование сокетов/ОС для меня новы, все это было предположением.

На самом деле это не практическое применение программирования, просто попытка разработки и понимания.

Спасибо


person dm03514    schedule 03.11.2015    source источник
comment
На стороне клиента JS я бы выполнил следующую итерацию в обратном вызове успеха   -  person mplungjan    schedule 03.11.2015


Ответы (1)


Я не думаю, что это гарантировано, особенно при сохранении активности и повторном использовании сокетов.

person Daniel A. White    schedule 03.11.2015