Ich versuche 400k Zeilen aus einer mysql
Datenbank abzufragen, indem ich 10 auf einmal. Ich brauche eine Rekursion wie dies zu tun, dass asynchron zu verwenden:Wie asynchron eine große Menge von Daten mit Node.js abfragen?
var migrate = function(offset, size) {
Mysql.query(query, [offset, size], function(err, rows) {
if (!err && rows.length) {
setTimeout(function() {
// Pretend doing something and get next batch.
migrate(offset + size, size);
}, 1000);
}
});
};
migrate(0, 10);
Das Problem ist, der erste Aufruf von migrate()
ein Kind Rückruf erzeugt von selbst, und alle von ihnen im Gedächtnis bleiben, bis die letzten migrate()
fertig ist .
Die einzige Lösung, die in den Sinn kommt, ist es synchron in while
Schleife ausführen.
Können Sie bitte beraten, wie man das richtig macht? Vielen Dank.
aa Weg finden, die Menge der Anrufe benötigt werden, um entweder zu reduzieren Schreiben komplexer sql (so brauchen Sie nicht 400k Zeilen) oder nach mehr Zeilen zur gleichen Zeit. Oder holen Sie nur die Zeilen, die Sie sofort verwenden. Wenn Sie am Ende genau 400k Zeilen zur selben Zeit benötigen, gibt es wahrscheinlich ein Designproblem. Sie könnten die Funktion auch so umschreiben, dass sie nicht rekursiv ist, sondern an eine andere Funktion übergeben wird, die die zurückgegebenen Daten verarbeitet und erneut migriert. Wenn Sie die zurückgegebenen Daten klonen oder dereferenzieren, sollten die Prev Ajax-Aufrufe in der Lage sein, Garbage Collected zu sammeln und Speicher freizugeben. – Shilly