2015-04-21 101 views
5

行數組中有超過2000個對象需要處理,但出現錯誤最大調用堆棧超出。回調函數正在操作數據庫。我試圖用Nodejs RangeError超過最大調用堆棧

的setTimeout

是工作,但使執行緩慢。有沒有其他方法可以解決這個問題。

var updateRowsStatus = function (req, rows, next) { 

    if (rows.length == 0) { 
     return next(); 
    } 

    var batchRows = rows.splice(0, 20); 
    var count = 0; 


    batchRows.forEach(function (row) { 

     // other function 

     updateSubEntity(req, row, 'rows', function (err, response) { 
      if (err)throw err; 

      if (++count == batchRows.length) { 

       updateRowsStatus(req, rows, next); 

      } 
     }); 
    }); 
}; 
+2

您正在使用遞歸函數(調用自己的函數)。你能想出一種方法來處理沒有這種模式的相同處理嗎? – joews

+0

處理數據庫操作的遞歸或循環總是一個壞主意。 – Lewis

+0

請建議最佳解決方案。 – Rohit

回答

0

有人發佈此解決方案,但刪除。所以我再次發佈他的解決方案。感謝他。

var count = 0; 
    var length = rows.length; 

    while (rows.length > 0) { 

     console.log('rows -', rows.length); 

     var batchRows = rows.splice(0, 20); 

     batchRows.forEach(function (row) { 
      updateSubEntity(req, row, 'rows', function (err, response) { 
       if (err)throw err; 

       if (++count == length) { 

        return next(); 
       } 

      }); 
     }); 
    } 
相關問題