我正在使用我的公司数据库,并且正在尝试设置路由。我得到的数据是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的值作为回应,我得到一个空对象。我发现这种行为很奇怪!有人可以向我解释这一点。
是它的工作原理!谢谢 – gsdf
嘿,因为复杂性是O(n)所以如果n> = 10000000我将得到的资源是空的。不是吗? – gsdf
无论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秒。 –