我正在使用我的公司數據庫,並且正在嘗試設置路由。我得到的數據是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秒。 –