Start · Sprachen · JavaScript · Referenz · TaskPriorityChangeEvent.previousPriority

TaskPriorityChangeEvent.previousPriority

Eigenschaft

Liefert die Priorität (<code>"user-blocking"</code>, <code>"user-visible"</code> oder <code>"background"</code>), die ein <code>TaskSignal</code> vor dem Auslösen des <code>prioritychange</code>-Ereignisses hatte.

seit JavaScript Prioritized Task Scheduling API — Chromium 94+ (Ch Kategorie: webapi

Signatur

TaskPriorityChangeEvent.previousPriority

Beschreibung

Die schreibgeschützte Eigenschaft previousPriority eines TaskPriorityChangeEvent enthält die alte Priorität eines TaskSignal. Das Ereignis wird ausgelöst, wenn ein TaskController über TaskController.prototype.setPriority() eine neue Priorität setzt. Die neue Priorität steht zu diesem Zeitpunkt schon in event.target.priority.

Wenn du previousPriority und event.target.priority vergleichst, siehst du, in welche Richtung sich die Priorität geändert hat: hoch (z. B. von "background" auf "user-blocking") oder runter. Das ist nützlich für Protokolle, für die Fehlersuche und für Code, der auf eine Herabstufung reagieren soll. Ein Beispiel: Du startest aufwendige Vorarbeit erst, wenn ein Task nach vorne rutscht.

Möglich sind die drei Werte der Aufzählung TaskPriority: "user-blocking" (höchste Priorität), "user-visible" (Standard) und "background" (niedrigste).

Rückgabewert

Typ
"user-blocking" | "user-visible" | "background"
Beschreibung
Die alte Priorität des TaskSignal als Zeichenkette. Die Eigenschaft ist schreibgeschützt.

Beispiele

Prioritätswechsel protokollieren

const controller = new TaskController({ priority: 'background' });

controller.signal.addEventListener('prioritychange', (event) => {
  console.log(`Priorität: ${event.previousPriority} → ${event.target.priority}`);
});

controller.setPriority('user-blocking');
Priorität: background → user-blocking

Hoch- oder Herabstufung erkennen

const rang = { 'background': 0, 'user-visible': 1, 'user-blocking': 2 };
const controller = new TaskController();

controller.signal.onprioritychange = (event) => {
  const alt = rang[event.previousPriority];
  const neu = rang[event.target.priority];
  console.log(neu > alt ? 'Hochgestuft' : 'Herabgestuft');
};

controller.setPriority('background'); // von user-visible
controller.setPriority('user-blocking');
Herabgestuft Hochgestuft

Geplanten Task zur Laufzeit umpriorisieren

const controller = new TaskController({ priority: 'background' });

controller.signal.addEventListener('prioritychange', ({ previousPriority, target }) => {
  console.log(`Vorab-Laden: ${previousPriority} → ${target.priority}`);
});

scheduler.postTask(() => console.log('Daten vorab geladen'), {
  signal: controller.signal,
});

// Nutzer fährt mit der Maus über den Link → Task wird dringend
document.querySelector('a')?.addEventListener('mouseenter', () => {
  controller.setPriority('user-visible');
}, { once: true });
Vorab-Laden: background → user-visible Daten vorab geladen

Ereignis selbst erzeugen (z. B. für Tests)

const event = new TaskPriorityChangeEvent('prioritychange', {
  previousPriority: 'user-visible',
});
console.log(event.previousPriority);
user-visible

// Wichtig · Fallstricke

  • Neue Priorität: Das Ereignis selbst hat keine Eigenschaft für den neuen Wert. Lies ihn aus event.target.priority (dem TaskSignal).
  • Nur mit TaskController: prioritychange wird nur ausgelöst, wenn setPriority() aufgerufen wird. Ein Signal aus TaskSignal.any() ändert seine Priorität nur, wenn es sie von einem Quell-Signal übernimmt.
  • Gleicher Wert: Setzt setPriority() die Priorität, die schon aktiv ist, wird kein Ereignis ausgelöst.
  • Rekursion: Wenn du setPriority() im prioritychange-Handler aufrufst, während eine Prioritätsänderung noch läuft, wird ein NotAllowedError (DOMException) geworfen.
  • Browser-Unterstützung: Die Prioritized Task Scheduling API ist nicht in allen Browsern verfügbar (in Safari fehlt sie). Prüfe sie vorher mit 'scheduler' in globalThis bzw. typeof TaskController !== 'undefined', oder binde ein Polyfill ein.