簡體   English   中英

為什么有時Array.push(element)無法正常工作?

[英]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 dateArrresultArr之間的I / O結構為1到1時,由於應存儲106個項目,因此只有66個項目存儲在resultArr

每次迭代后我都記錄了resultArr的大小

grabData方法被調用時,您將向某個地方或一個名為cassandra的人發起查詢。 正如Felix Kling所寫,您的符號似乎顯示了一個異步函數,該函數啟動請求並返回。

由於該函數是異步的,因此您不知道查詢何時准備就緒。 當數據庫被鎖定以進行轉儲或其他操作時,這甚至可能花費很長時間。

當您從grabData “ iteration”返回並檢查resultArrresultArr將被每個返回值完全填充。 甚至有可能第五次迭代在第三次,第四次或之前的任何迭代之前返回查詢。 因此,在您的resultArr中,有時在點m<no>n處具有迭代n值。

只要您(或我們)對cassandra的運行方式一無所知,就無法說出查詢何時答復。

因此,當您檢查結果數組時,它返回已完成查詢的數量,而不是迭代的數量。

找到了根本原因:使用node.js查詢Cassandra時存在硬限制。 我試圖完全執行的查詢太大。 dateArr分成較小的塊,並使用這些較小的塊進行查詢即可解決此問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM