2015-04-21 16 views
5

Ci sono più di 2000 oggetti nell'array di righe che devono essere elaborati ma si sono verificati errori. Chiamata massima Stack superata. Le funzioni di backback stanno manipolando il database. Ho provato ad utilizzareNodejs RangeError Numero massimo di stack di chiamate superato

setTimeout

che sta lavorando ma rendendo l'esecuzione lenta. C'è qualche altro metodo per risolverlo.

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

Si sta utilizzando una funzione ricorsiva (una che si chiama). Riesci a pensare a un modo per fare la stessa elaborazione senza quel modello? – joews

+0

La ricorsione o il ciclo per la gestione delle operazioni db è sempre una cattiva idea. – Lewis

+0

Si prega di suggerire la migliore soluzione. – Rohit

risposta

0

Qualcuno ha pubblicato questa soluzione ma rimosso. Quindi sto postando di nuovo la sua soluzione. Grazie a lui.

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

      }); 
     }); 
    } 
Problemi correlati