Nodejsasynchronous执行

我正在与我公司的数据库工作,我正在尝试build立一个路线。 我得到的数据是1000个值的JSON数组。

这里的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应该推入到调用堆栈,同时执行其他function,但发生了什么是我得到预期的回应。 succ []中的值的数量是1000,所以我写了另一个函数注释Object.values,并写一个for循环,

 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的价值作为响应我得到一个空的对象。 我发现这种行为很奇怪! 有人可以向我解释这一点。

它认为这可能是expression你的号码变成一个对象。 根据文档发送可以接受一个缓冲区,string或数组。

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

尝试类似于:res.status(200).send({num:x});

嗨亲爱的节点是asynchronous编程语言,因为它在内部会跳过需要更多时间执行的函数,它会首先发送响应。

所以你必须使用节点内的同步概念

你可以参考asynchronous包

同步包