Nodejs асинхронность исполнения

1

Я работаю с моей базой данных, и я пытаюсь настроить маршрут. Данные, которые я получаю, представляют собой массив 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 в качестве ответа, я получаю пустой объект. Я считаю это поведение странным! Может ли кто-нибудь объяснить это мне.

Теги:
callback
asynchronous

2 ответа

2
Лучший ответ

Он считает, что это, вероятно, выражает превращение вашего номера в объект. В соответствии с документом send может принимать буфер, строку или массив.

https://expressjs.com/en/4x/api.html#res.send

Попробуйте что-то вроде: res.status(200).send({num: x});

  • 0
    да, это работает! Спасибо
  • 0
    эй, так как сложность O (n), поэтому, если n> = 10000000, Res, который я получу, будет пустым. не так ли?
Показать ещё 1 комментарий
0

Привет, дорогой, поскольку Node является асинхронным языком программирования, он будет пропускать функции, которые занимают больше времени для выполнения, и он сначала отправит ответ.

Поэтому вы должны использовать синхронную концепцию внутри узла

u может ссылаться на пакет async

пакет синхронизации

Ещё вопросы

Сообщество Overcoder
Наверх
Меню