2017-06-13 167 views
1

我正在使用我的公司数据库,并且正在尝试设置路由。我得到的数据是1000个值的JSON数组。Nodejs异步执行

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

回答

2

它认为这可能表示将你的号码变成一个对象。根据文档send可以接受缓冲区,字符串或数组。

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

尝试类似:res.status(200)。发送({NUM:X});

+0

是它的工作原理!谢谢 – gsdf

+0

嘿,因为复杂性是O(n)所以如果n> = 10000000我将得到的资源是空的。不是吗? – gsdf

+0

无论n是什么,复杂性都不应改变你的结果。 O(n)只是意味着随着大小的增加(n),运行算法所需的时间将线性增加。所以如果n = 1需要1秒,那么n = 100需要100秒。这比O(n^2)要好得多,因为运行时会快得多。 n = 1是1秒,n = 100是10,000秒。但不如O(log n)n = 1 => 1秒,n = 100 => 2秒。 –

0

嗨亲爱的既然节点是异步编程语言,它会在内部跳过执行时间较长的函数,它会首先发送响应。

还是你必须使用同步的概念里面节点

ü可以参考async package

sync package