Signatur
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
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');
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;
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;
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);
// 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 globalThisbzw.'scheduler' in globalThis. previousPriorityenthält die alte Priorität. Die neue Priorität steht inevent.target.priority.- Ruft man
setPriority()mit der bereits gesetzten Priorität auf, wird kein Event ausgelöst. - Rufen Sie
setPriority()imprioritychange-Handler für dasselbe Signal erneut auf, wirft der Browser eineDOMExceptionvom TypNotAllowedError. Rekursive Prioritätswechsel sind nicht erlaubt. - Die Priorität lässt sich nur über einen
TaskControllerändern. Ein vonTaskSignal.any()abgeleitetes Signal übernimmt die Priorität seines Quellsignals und löst dabei ebenfallsprioritychangeaus. - Das Event lässt sich nicht abbrechen. Die Prioritätsänderung ist bereits passiert, wenn der Handler läuft.