Aufruf der Funktion rekursiv in regelmäßigen Abständen
Also ich Frage mich, was ist der bessere Weg (im Hinblick auf stack-Wachstum und performance), um rekursiv eine Funktion aufzurufen, die in regelmäßigen Abständen?
Zum Beispiel, können sagen, ich soll zum Lesen der Datei-Inhalt alle 200 ms. Ich habe die folgenden zwei Methoden, und fragte sich, ob Sie in irgendeiner Weise anders?
Methode 1: Verwendung einfacher ols setTimeout ohne Prozess.nextTick
var fs = require('fs');
(function loop() {
//Print to time to indicate something is happening
console.log(new Date().toString());
//Read a 51MB file
fs.readFile('./testfile', function (err, data) {
if (err) console.log(err);
});
//Call the same function again
setTimeout(function () {
loop();
}, 200);
})();
Methode 2: Aufrufende Prozess.nextTick innen setTimeout
var fs = require('fs');
(function loop() {
//Print to time to indicate something is happening
console.log(new Date().toString());
//Read a 51MB file
fs.readFile('./testfile', function (err, data) {
if (err) console.log(err);
});
//Call the same function again
setTimeout(function () {
process.nextTick(function () {
loop();
});
}, 200);
})();
Was ich wissen will ist, dass das hinzufügen Prozess.nextTick innen setTimeout hilft oder nicht? Wird dem Aufruf der Funktion im inneren Prozess.nextTick lindern die stack-Nutzung oder nicht?
- Nicht, um Sie zu beantworten, aber Sie sollten auf jeden Fall setzen die
setTimeout
in der callback-IhrreadFile
. - Ich sehe keine rekursiven Aufrufe hier. Der Aufruf von loop wird aufgerufen, wenn das timeout-Ereignis geschieht, nicht von der Funktion. Es kann erst aufgerufen werden, wenn loop() gibt
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es gibt keine Rekursion in das folgende vereinfachte Beispiel:
Ausgabe (beachten Sie, dass der Stapel wächst nicht)