Я работаю с моей базой данных, и я пытаюсь настроить маршрут. Данные, которые я получаю, представляют собой массив JSON из 1000 значений.
Здесь function--
router.get('some_route', function(req, res, next){
var ress = [];
var name = req.params.name;
baWelcomeController.autoComplete(name).then(function(succ){
var x = Object.values(succ[0][0]);
res.status(200).send(x);
}).catch(function(err){
res.status(404).send(err);
console.log("error in router.get", err);
});
});
Теперь посмотрим на object.values
часть моего кода, из Интернета я познакомился с его функцией O (n), поэтому nodejs должен вставлять ее в стек вызовов и в то же время выполнять другие функции, но то, что происходит, я есть получив ответ, как ожидалось. Число значений в succ [] равно 1000, поэтому я написал еще одну функцию, комментирующую Object.values и записывая цикл for instead-
router.get('some_route', function(req, res, next){
var ress = [];
var name = req.params.name;
baWelcomeController.autoComplete(name).then(function(succ){
var x = 0;
for(var i = 0; i <= 1000; i++)
x += i;
res.status(200).send(x);
}).catch(function(err){
res.status(404).send(err);
console.log("error in router.get", err);
});
});
Теперь я не получаю значение x в качестве ответа, я получаю пустой объект. Я считаю это поведение странным! Может ли кто-нибудь объяснить это мне.
Он считает, что это, вероятно, выражает превращение вашего номера в объект. В соответствии с документом send может принимать буфер, строку или массив.
https://expressjs.com/en/4x/api.html#res.send
Попробуйте что-то вроде: res.status(200).send({num: x});
Привет, дорогой, поскольку Node является асинхронным языком программирования, он будет пропускать функции, которые занимают больше времени для выполнения, и он сначала отправит ответ.
Поэтому вы должны использовать синхронную концепцию внутри узла
u может ссылаться на пакет async