Nodejs异步执行

时间:2017-06-13 05:02:01

标签: javascript json node.js asynchronous callback

我正在使用我的公司数据库,我正在尝试建立一条路线。我得到的数据是一个1000个值的JSON数组。

这是函数 -

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循环的函数 -

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

2 个答案:

答案 0 :(得分:2)

它认为这可能会将你的号码变成一个对象。根据文档,send可以接受Buffer,String或Array。

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

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

答案 1 :(得分:0)

嗨亲爱的,因为Node是异步编程语言,在内部它将跳过需要更长时间执行的函数,它将首先发送响应。

所以你必须在节点

中使用Synchronous Concept 你可以参考async package

sync package