Node.js Timers Modul

Java FileIntegrierte Module in Node.js


von Node.jstimersDas Modul bietet eine Reihe von Funktionen, um Code nach einer bestimmten Zeit oder in bestimmten Intervallen wiederholt auszuführen. Diese Merkmale sind sehr nützlich für die Implementierung von verzögerter Ausführung, periodischen Aufgaben und Timeout-Steuerung.

Obwohltimersdas Modul ist ein Kernmodul von Node.js, aber seine Methoden wiesetTimeout(), setInterval()undsetImmediate()sind global verfügbar, ohne expliziten Import.


Haupt-Timer-Funktionen

setTimeout()

setTimeout()Die Funktion wird verwendet, um eine Callback-Funktion einmal nach einer angegebenen Anzahl von Millisekunden auszuführen.

Beispiel

// Nachricht nach 2 Sekunden ausgeben
setTimeout(() => {
  console.log('Diese Nachricht wird nach 2 Sekunden angezeigt');
}, 2000);

Parameterbeschreibung

  1. Callback-Funktion: Die auszuführende Funktion
  2. Verzögerungszeit: Zeit in Millisekunden (1000 ms = 1 Sekunde)
  3. Optionale Parameter: Zusätzliche Parameter, die an die Callback-Funktion übergeben werden

Beispiel

// Beispiel mit zusätzlichen Parametern
setTimeout((name, age) => {
  console.log(`Hallo, ${name}, du bist ${age}Jahre alt`);
}, 1000, 'Zhang San', 25);

clearTimeout()

clearTimeout()Wird verwendet, um einen zuvor eingestelltensetTimeout()Timer abzubrechen.

Beispiel

const timerId = setTimeout(() => {
  console.log('Diese Nachricht wird nicht angezeigt');
}, 2000);

clearTimeout(timerId); // Timer abbrechen

setInterval()

setInterval()Die Funktion wird verwendet, um eine Callback-Funktion in festgelegten Millisekundenintervallen wiederholt auszuführen.

Beispiel

// Jede Sekunde eine Nachricht ausgeben
let counter = 0;
const intervalId = setInterval(() => {
  counter++;
  console.log(`Dies ist die ${counter}Ausführung`);
  if (counter === 5) {
    clearInterval(intervalId); // Timer stoppen
  }
}, 1000);

clearInterval()

clearInterval()Wird verwendet, um einen zuvor eingestelltensetInterval()wiederholenden Timer zu stoppen.

Beispiel

const intervalId = setInterval(() => {
  console.log('Diese Nachricht wird wiederholt angezeigt');
}, 1000);

// Timer nach 5 Sekunden stoppen
setTimeout(() => {
  clearInterval(intervalId);
}, 5000);

setImmediate()

setImmediate()Die Funktion wird verwendet, um eine Callback-Funktion am Ende der aktuellen Ereignisschleife auszuführen.

Beispiel

console.log('Start');

setImmediate(() => {
  console.log('Callback sofort ausgeführt');
});

console.log('Ende');

// Ausgabereihenfolge:
// Start
// Ende
// Callback sofort ausgeführt

clearImmediate()

clearImmediate()Wird verwendet, um einen zuvor eingestelltensetImmediate()Immediate-Callback.

Beispiel

const immediateId = setImmediate(() => {
  console.log('Diese Nachricht wird nicht angezeigt');
});

clearImmediate(immediateId);

Ausführungsreihenfolge von Timern

Das Verständnis der Node.js-Event-Loop ist sehr wichtig, um die Ausführungsreihenfolge von Timern zu beherrschen. Im Folgenden wird die Ausführungsreihenfolge mehrerer Timer beschrieben:

  1. Synchroner Code: Wird zuerst ausgeführt
  2. process.nextTick(): Wird unmittelbar nach dem Ende der aktuellen Phase ausgeführt
  3. Promise-Callbacks: Microtask-Warteschlange
  4. setImmediate(): Wird nach I/O-Callbacks ausgeführt
  5. setTimeout() und setInterval(): Wird in der Check-Phase ausgeführt

Beispiel

console.log('Start');

setTimeout(() => console.log('setTimeout'), 0);
setImmediate(() => console.log('setImmediate'));
process.nextTick(() => console.log('nextTick'));
Promise.resolve().then(() => console.log('Promise'));

console.log('Ende');

// Typische Ausgabereihenfolge:
// Start
// Ende
// nextTick
// Promise
// setTimeout
// setImmediate

Erweiterte Nutzung und Hinweise

Timer abbrechen

Alle Timer-Funktionen geben einTimeoutObjekt zurück, das zum Abbrechen des Timers verwendet werden kann. Es ist sicher, die Abbruchfunktion aufzurufen, auch wenn der Timer bereits ausgeführt wurde.

Beispiel

const timeout = setTimeout(() => {}, 1000);
clearTimeout(timeout); // Kann bedenkenlos aufgerufen werden, auch wenn der Timer bereits ausgeführt wurde

Timer-Genauigkeit

Node.js-Timer garantieren keine präzise Ausführungszeit; sie stellen eine Mindestwartezeit dar. Systemlast und andere Faktoren können die tatsächliche Ausführungszeit beeinflussen.

Speicherlecks

Vergessen zu löschensetInterval()Timer sind eine häufige Ursache für Speicherlecks. Achte darauf, Timer zu löschen, wenn sie nicht mehr benötigt werden.

Beispiel

// Falscher Ansatz - kann ein Speicherleck verursachen
setInterval(() => {
  // Eine Operation ausführen
}, 1000);

// Korrekter Ansatz - den Timer zu einem geeigneten Zeitpunkt löschen
const interval = setInterval(() => {
  // Eine Operation ausführen
  if (someCondition) {
    clearInterval(interval);
  }
}, 1000);

Rekursives setTimeout statt setInterval

Für Aufgaben, die ein festes Intervall erfordern, deren Ausführungszeit jedoch jedes Mal unsicher ist, erweist sich die Verwendung eines rekursiven AnsatzessetTimeoutVergleichensetIntervalals zuverlässiger.

Beispiel

function doSomething() {
  console.log('Aufgabe wird ausgeführt...');
 
  // Simuliere unsichere Ausführungszeit der Aufgabe
  const delay = Math.random() * 1000;
 
  setTimeout(doSomething, 1000 + delay);
}

setTimeout(doSomething, 1000);

Praktische Anwendungsbeispiele

Implementierung eines einfachen Countdowns

Beispiel

function countdown(seconds) {
  let current = seconds;
 
  console.log(`Countdown startet: ${current}seconds`);
 
  const timer = setInterval(() => {
    current--;
   
    if (current <= 0) {
      clearInterval(timer);
      console.log('Countdown beendet!');
    } else {
      console.log(`Verbleibende Zeit: ${current}seconds`);
    }
  }, 1000);
}

countdown(5);

Behandlung von Zeitüberschreitungen bei Anfragen

Beispiel

function fetchWithTimeout(url, timeout = 5000) {
  return new Promise((resolve, reject) => {
    const timeoutId = setTimeout(() => {
      reject(new Error(`Zeitüberschreitung der Anfrage (${timeout}ms)`));
    }, timeout);
   
    fetch(url)
      .then(response => {
        clearTimeout(timeoutId);
        resolve(response);
      })
      .catch(error => {
        clearTimeout(timeoutId);
        reject(error);
      });
  });
}

// Anwendungsbeispiel
fetchWithTimeout('https://api.example.com/data')
  .then(data => console.log(data))
  .catch(error => console.error(error));

Wenn Sie das Node.js-timersModul beherrschen, können Sie die Ausführungszeit von Code effektiv steuern und verschiedene zeitgesteuerte Aufgaben und asynchrone Kontrollflüsse implementieren.

Java FileIntegrierte Module in Node.js

Andere Erweiterungen