2015-04-21 12 views
5

Istnieje ponad 2000 obiektów w tablicy wierszy, które muszą zostać przetworzone, ale otrzymałem błąd Maksymalne wywołanie Przekroczony stos. Funkcja klapki manipuluje bazą danych. Próbowałem użyćNodejs RangeError Maksymalny stos wywołań przekroczył

setTimeout

że działa, ale czyni wykonanie powoli. Czy istnieje inna metoda, aby to naprawić.

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

Używasz funkcji rekursywnej (takiej, która sama się nazywa). Czy możesz wymyślić sposób na to samo przetwarzanie bez tego wzorca? – joews

+0

Rekursja lub pętla do obsługi operacji na db są zawsze złym pomysłem. – Lewis

+0

Proszę sugerować najlepsze rozwiązanie. – Rohit

Odpowiedz

0

Ktoś opublikował to rozwiązanie, ale został usunięty. Więc ponownie zamieszczam jego rozwiązanie. Dzięki mu.

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

      }); 
     }); 
    } 
Powiązane problemy