Start · Sprachen · JavaScript · Referenz · TaskPriorityChangeEvent

TaskPriorityChangeEvent

Schnittstelle

Ereignisobjekt des <code>prioritychange</code>-Events. Es wird an einem <code>TaskSignal</code> ausgelöst, wenn sich die Priorität der zugehörigen Aufgaben ändert.

seit JavaScript Chromium 94+ (Chrome, Edge, Opera); Firefox 142+; Kategorie: webapi

Signatur

interface TaskPriorityChangeEvent extends Event

Beschreibung

TaskPriorityChangeEvent gehört zur Prioritized Task Scheduling API. Ein Objekt dieser Schnittstelle wird am TaskSignal ausgelöst, sobald dessen Priorität geändert wird – meistens über TaskController.prototype.setPriority(). Alle Aufgaben, die mit scheduler.postTask() und diesem Signal eingeplant wurden, laufen danach mit der neuen Priorität.

Die Schnittstelle erweitert Event um genau eine Eigenschaft: previousPriority. Sie enthält die alte Priorität ("user-blocking", "user-visible" oder "background"). Die neue Priorität lesen Sie über event.target.priority aus, also über das auslösende TaskSignal.

Das Event hilft Ihnen, auf Prioritätswechsel zu reagieren. Beispiele: Sie protokollieren den Wechsel, passen die Oberfläche an (etwa eine Ladeanzeige für Aufgaben, die in den Vordergrund geholt wurden) oder ändern abhängige Arbeit mit. Registrieren können Sie es mit signal.addEventListener("prioritychange", handler) oder über die Eigenschaft signal.onprioritychange.

Parameter

Name Typ Default Beschreibung
$type Pflicht string Konstruktor-Parameter: der Name des Events, üblicherweise "prioritychange".
$options Pflicht object Konstruktor-Parameter: Optionsobjekt. Es erbt alle Felder von EventInit (bubbles, cancelable, composed).
$options.previousPriority Pflicht "user-blocking" | "user-visible" | "background" Die Priorität vor der Änderung. Sie ist später über event.previousPriority lesbar.

Rückgabewert

Typ
TaskPriorityChangeEvent
Beschreibung
new TaskPriorityChangeEvent(type, options) gibt ein neues Ereignisobjekt zurück. Die schreibgeschützte Instanzeigenschaft previousPriority (string) enthält die vorherige Priorität.

Beispiele

Prioritätswechsel mit addEventListener beobachten

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

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

scheduler.postTask(() => console.log('Aufgabe läuft'), { signal: controller.signal });

// Nutzer interagiert – Aufgabe wird hochgestuft
controller.setPriority('user-blocking');
Priorität: background → user-blocking Aufgabe läuft

Handler über die Eigenschaft onprioritychange

const controller = new TaskController();

controller.signal.onprioritychange = ({ previousPriority, target }) => {
  document.body.dataset.taskPriority = target.priority;
  console.log('Vorher:', previousPriority);
};

controller.setPriority('background');

// Handler wieder entfernen
controller.signal.onprioritychange = null;
Vorher: user-visible

Vorabladen beim Sichtbarwerden hochstufen

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

const preload = async () => {
  const res = await fetch('/api/artikel?page=2');
  return res.json();
};

const logChange = (e) => console.log('hochgestuft von', e.previousPriority);
controller.signal.addEventListener('prioritychange', logChange, { once: true });

const resultPromise = scheduler.postTask(preload, { signal: controller.signal });

const observer = new IntersectionObserver(([entry]) => {
  if (entry.isIntersecting) {
    controller.setPriority('user-visible');
    observer.disconnect();
  }
});
observer.observe(document.querySelector('#weiter'));

const daten = await resultPromise;
hochgestuft von background

Event manuell konstruieren (z. B. für Tests)

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

console.log(event.type, event.previousPriority, event instanceof Event);
prioritychange user-visible true

// Wichtig · Fallstricke

  • Browser-Unterstützung: Die Schnittstelle gibt es nur in Chromium-Browsern (ab Version 94) und in neueren Firefox-Versionen, nicht in Safari. Prüfen Sie vorab mit 'TaskPriorityChangeEvent' in globalThis bzw. 'scheduler' in globalThis.
  • previousPriority enthält die alte Priorität. Die neue Priorität steht in event.target.priority.
  • Ruft man setPriority() mit der bereits gesetzten Priorität auf, wird kein Event ausgelöst.
  • Rufen Sie setPriority() im prioritychange-Handler für dasselbe Signal erneut auf, wirft der Browser eine DOMException vom Typ NotAllowedError. Rekursive Prioritätswechsel sind nicht erlaubt.
  • Die Priorität lässt sich nur über einen TaskController ändern. Ein von TaskSignal.any() abgeleitetes Signal übernimmt die Priorität seines Quellsignals und löst dabei ebenfalls prioritychange aus.
  • Das Event lässt sich nicht abbrechen. Die Prioritätsänderung ist bereits passiert, wenn der Handler läuft.