Вот тут и возникает асинхронная природа. Несмотря на то, что вы делали параллельный запрос к NodeJS, однако запрос приходит один за другим на сервер.И все по умолчанию синхронно в Javascript означает, что следующий запрос может быть обработан только после первого.Так что если ваш API включает код блокировки, который занимает 5 минут, то ваш следующий запрос будет выполнен через 5 минут, даже если он поступил в то же время.
В вашем примере doSomething()
может быть синхронным или асинхронным, оно не влияет на синхронный поток и будет i++
перед принятием следующего запроса.
Для имитации вы можете попробовать большое значение дляЗацикливайтесь и смотрите, когда будет получен ответ на следующий вызов API.
var app = express();
var i = 0;
app.get("/", function(req, res) {
console.log('request received i = ', i);
for(let j = 0; j<9999999999999; j++) {}
i++;
res.render("test");
}
, если вы хотите выполнить весь параллельный запрос даже для i>10
, просто увеличьте i
после некоторой асинхронной функции.
app.get("/", function(req, res) {
console.log('request received i = ', i);
if (i<10) {
setTimeout(function(){
i++;
},5000);
} else {
doSomethingElse();
}
res.render("test");
}
Любое число запросов, полученных в течение 5 секунд после первого запроса, будет выполнено, поскольку значение i
не увеличивается и будет увеличиваться после асинхронной работы в течение 5 секунд.Это логика для асинхронного цикла и цикла обработки событий.
Проверьте это на больше по циклу событий .