Start · Sprachen · JavaScript · Referenz · WorkerGlobalScope.clearInterval()

WorkerGlobalScope.clearInterval()

Methode

Beendet innerhalb eines Workers eine wiederholende Aktion, die vorher mit <code>setInterval()</code> gestartet wurde.

seit JavaScript Baseline: alle Browser (Web Workers) Kategorie: webapi

Signatur

WorkerGlobalScope.clearInterval(intervalID)

Beschreibung

Die Methode clearInterval() der Schnittstelle WorkerGlobalScope stoppt einen Intervall-Timer, der vorher im selben Worker mit setInterval() angelegt wurde. Danach wird der Callback nicht mehr aufgerufen. Im Worker ist die Methode direkt global verfügbar, also als clearInterval() oder self.clearInterval(). Das gilt für dedizierte Worker, Shared Worker und Service Worker.

Übergeben wird die numerische Kennung, die setInterval() zurückgegeben hat. Sinnvoll ist die Methode z. B. bei Polling-Schleifen, Heartbeat-Nachrichten an den Hauptthread oder Fortschrittsmeldungen, die aufhören sollen, sobald eine Aufgabe fertig ist oder der Hauptthread eine Stopp-Nachricht schickt.

Timer-Kennungen gelten nur im jeweiligen globalen Kontext. Eine im Worker erzeugte ID lässt sich also nicht im Hauptthread mit window.clearInterval() stoppen und umgekehrt auch nicht. Stoppen Sie Intervalle deshalb immer in dem Kontext, in dem sie gestartet wurden, oder schicken Sie per postMessage() eine Aufforderung dorthin.

Parameter

Name Typ Default Beschreibung
$intervalID number Kennung des Intervalls, die setInterval() zurückgegeben hat. Bei einer ungültigen oder bereits gelöschten ID sowie bei undefined passiert nichts, und es wird kein Fehler ausgelöst.

Rückgabewert

Typ
void
Beschreibung
Gibt undefined zurück.

Beispiele

Intervall nach fester Anzahl von Durchläufen stoppen

// worker.js
let zaehler = 0;
const id = setInterval(() => {
  zaehler++;
  postMessage(`Tick ${zaehler}`);
  if (zaehler === 3) {
    clearInterval(id);
    postMessage('Intervall beendet');
  }
}, 1000);
Tick 1 Tick 2 Tick 3 Intervall beendet

Heartbeat per Nachricht aus dem Hauptthread starten und stoppen

// worker.js
let heartbeatId = null;

self.addEventListener('message', ({ data }) => {
  if (data === 'start' && heartbeatId === null) {
    heartbeatId = setInterval(() => postMessage({ typ: 'heartbeat', zeit: Date.now() }), 2000);
  }
  if (data === 'stop') {
    clearInterval(heartbeatId);
    heartbeatId = null; // erlaubt einen erneuten Start
    postMessage({ typ: 'gestoppt' });
  }
});

// main.js
const worker = new Worker('worker.js');
worker.onmessage = (e) => console.log(e.data);
worker.postMessage('start');
setTimeout(() => worker.postMessage('stop'), 5000);
{ typ: 'heartbeat', zeit: ... } { typ: 'heartbeat', zeit: ... } { typ: 'gestoppt' }

Polling beenden, sobald ein Ergebnis vorliegt

// worker.js
const pollId = setInterval(async () => {
  try {
    const res = await fetch('/api/job/42');
    const job = await res.json();
    if (job.status === 'fertig') {
      clearInterval(pollId);
      postMessage(job);
    }
  } catch (err) {
    clearInterval(pollId);
    postMessage({ fehler: err.message });
  }
}, 3000);
{ status: 'fertig', ... }

// Wichtig · Fallstricke

  • Kontextgebunden: Timer-IDs aus dem Worker gelten nicht im Hauptthread und auch nicht in anderen Workern. Ein Aufruf mit einer fremden ID bleibt ohne Wirkung und meldet keinen Fehler.
  • Gemeinsamer ID-Pool: setTimeout() und setInterval() teilen sich die Kennungen. Deshalb kann clearInterval() technisch auch einen Timeout löschen und umgekehrt. Verwenden Sie trotzdem die passende Methode, damit der Code lesbar bleibt.
  • Asynchrone Callbacks: clearInterval() bricht einen Callback nicht ab, der gerade läuft, also z. B. kein fetch, auf das noch gewartet wird. Es verhindert nur weitere Aufrufe. Lange asynchrone Arbeit brechen Sie bei Bedarf mit einem AbortController ab.
  • Überlappung: Dauert ein asynchroner Callback länger als das Intervall, laufen mehrere Durchläufe gleichzeitig. Hier ist ein rekursives setTimeout() oft die bessere Wahl.
  • Worker beenden: self.close() oder worker.terminate() stoppt automatisch alle Timer. Service Worker können der Browser jederzeit anhalten, deshalb sind Intervalle dort grundsätzlich unzuverlässig.
  • Kompatibilität: Wird von allen modernen Browsern in Workern unterstützt, ebenso von Deno. In Node.js gibt es ein eigenes Timer-Modell mit Timeout-Objekten statt Zahlen.