Рассмотрим следующие примеры: (предположим, экспресс доступен)
Пример 1:
app.get("/a", function(res){
// Some-Blocking function for 10 seconds
res.send("done");
});
app.get("/b", function(res){
res.send("done");
});
В этом примере, если сначала запрашивается / a, то через 1 секунду / b; / b не обрабатывается, пока не завершится / a? Если это одна нить, так и должно быть. Так как же устранить эту проблему?
Пример 2:
app.get("/a", function(res){
// Some-Library-Database function
db.find({"user.id" : 5}, function(data){
res.send(data);
});
});
app.get("/b", function(res){
res.send("done");
});
Опять же, / a запрашивается, поэтому он входит в функцию, вызывает db.find, поэтому, когда db.find завершен, обратный вызов выполняет res.send (data) из A. Таким образом, мы можем ответить / b без ожидания / запрос, верно? (Поправьте меня если я не прав)
Итак, как мы можем достичь примера 2 в примере 1? Можем ли мы сделать эту функцию блокировки для запуска асинхронной тоже? Или DB выполняет IO (отправка команд по TCP на сервер и т. Д.) Делает функцию асинхронной? Я имею в виду, единственное, что асинхронно в nodejs, с IO? Если требуются большие вычисления, нужно ли делать запрос ввода-вывода?
Я пытаюсь учиться и строить в соответствии с понятиями. Я прочитал NodeJS - рак пост, чтобы прочитать критику по поводу Нода, не уверен, что он просто троллит или нет.