[英]Why is Array.push(element) not working sometimes?
我正在為項目使用node.js,並且我的代碼中有此特定結構,這會引起問題。 我有一個包含106個項目的連續日期數組dateArr
。 我有一個數組resultArr
來保存結果數據。 我的代碼結構是這樣的:
function grabData(value, index, dateArr) {
cassandra client execute query with value from dateArr {
if (!err) {
if (result has more than 0 rows) {
process the query data
push to resultArr
}
if (result is empty) {
push empty set to resultArr
}
}
}
}
dateArr.forEach(grabData);
每次迭代后,我記錄了resultArr
的大小,在某些迭代中,似乎沒有任何內容被推送到resultArr
。 當dateArr
和resultArr
之間的I / O結構為1到1時,由於應存儲106個項目,因此只有66個項目存儲在resultArr
。
每次迭代后我都記錄了resultArr的大小
當grabData
方法被調用時,您將向某個地方或一個名為cassandra的人發起查詢。 正如Felix Kling所寫,您的符號似乎顯示了一個異步函數,該函數啟動請求並返回。
由於該函數是異步的,因此您不知道查詢何時准備就緒。 當數據庫被鎖定以進行轉儲或其他操作時,這甚至可能花費很長時間。
當您從grabData
“ iteration”返回並檢查resultArr
, resultArr
將被每個返回值完全填充。 甚至有可能第五次迭代在第三次,第四次或之前的任何迭代之前返回查詢。 因此,在您的resultArr中,有時在點m<n
或o>n
處具有迭代n
值。
只要您(或我們)對cassandra的運行方式一無所知,就無法說出查詢何時答復。
因此,當您檢查結果數組時,它返回已完成查詢的數量,而不是迭代的數量。
找到了根本原因:使用node.js查詢Cassandra時存在硬限制。 我試圖完全執行的查詢太大。 將dateArr
分成較小的塊,並使用這些較小的塊進行查詢即可解決此問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.