2017-06-13 164 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