2015-04-21 13 views
5

Có hơn 2000 đối tượng trong mảng hàng cần được xử lý nhưng có lỗi Maximum call Stack beyond.Callback function đang thao tác cơ sở dữ liệu. Tôi cố gắng để sử dụngNodejs RangeError Maximum Call stack vượt quá

setTimeout

rằng đang làm việc nhưng làm cho việc thực hiện chậm. Có phương pháp nào khác để sửa chữa nó không.

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

Bạn đang sử dụng hàm đệ quy (một hàm tự gọi). Bạn có thể nghĩ ra cách để thực hiện việc xử lý tương tự mà không có mẫu đó không? – joews

+0

Đệ quy hoặc vòng lặp để xử lý các hoạt động db luôn là một ý tưởng tồi. – Lewis

+0

Vui lòng đề xuất giải pháp tốt nhất. – Rohit

Trả lời

0

Ai đó đã đăng giải pháp này nhưng bị xóa. Vì vậy, tôi đăng một lần nữa giải pháp của mình. Nhờ anh ấy.

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(); 
       } 

      }); 
     }); 
    } 
Các vấn đề liên quan