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-Ihr readFile.
  • 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
InformationsquelleAutor Nikhil Singh | 2012-06-20
Schreibe einen Kommentar