Signatur
Beschreibung
Der Konstruktor TaskPriorityChangeEvent() gehört zur Prioritized Task Scheduling API. Er erzeugt ein Ereignisobjekt vom Typ TaskPriorityChangeEvent, das von Event erbt und zusätzlich die schreibgeschützte Eigenschaft previousPriority besitzt, also die Priorität vor der Änderung.
Normalerweise musst du dieses Ereignis nicht selbst erzeugen. Der Browser löst das Ereignis prioritychange automatisch an einem TaskSignal aus, sobald TaskController.prototype.setPriority() aufgerufen wird. Die neue Priorität steht dann in event.target.priority, die alte in event.previousPriority.
Selbst erzeugen lohnt sich vor allem für Tests und Polyfills: Mit dem Konstruktor kannst du Prioritätswechsel simulieren und deine prioritychange-Listener prüfen, ohne echte Aufgaben einzuplanen. Solche Ereignisse sind nicht vertrauenswürdig (isTrusted === false) und ändern die tatsächliche Priorität des Signals nicht.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $type Pflicht | string | Name des Ereignisses, Groß-/Kleinschreibung zählt. Der Browser verwendet immer "prioritychange". |
|
| $options Pflicht | Object | Einstellungsobjekt. Es erbt alle Felder von EventInit (bubbles, cancelable, composed, alle standardmäßig false) und enthält außerdem:
|
Rückgabewert
TaskPriorityChangeEvent-Objekt. Die Eigenschaft previousPriority ist auf den übergebenen Wert gesetzt.Beispiele
Ereignis erzeugen und Eigenschaften lesen
const event = new TaskPriorityChangeEvent('prioritychange', {
previousPriority: 'user-visible'
});
console.log(event.type); // Ereignistyp
console.log(event.previousPriority); // alte Priorität
console.log(event.isTrusted); // selbst erzeugt, daher false
Echter Prioritätswechsel über TaskController
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 braucht das Ergebnis sofort, also Priorität erhöhen
controller.setPriority('user-blocking');
Listener in einem Test mit einem simulierten Ereignis prüfen
const controller = new TaskController({ priority: 'user-visible' });
const log = [];
const onPriorityChange = (event) => {
log.push(event.previousPriority);
};
controller.signal.addEventListener('prioritychange', onPriorityChange);
// Simuliertes Ereignis: ändert signal.priority NICHT
controller.signal.dispatchEvent(
new TaskPriorityChangeEvent('prioritychange', { previousPriority: 'background' })
);
console.log(log);
console.log(controller.signal.priority);
controller.signal.removeEventListener('prioritychange', onPriorityChange);
// Wichtig · Fallstricke
- Browser-Unterstützung: Chromium-basierte Browser (Chrome, Edge, Opera) seit Version 94, Firefox seit Version 142. Safari unterstützt die Prioritized Task Scheduling API nicht. Prüfe deshalb vorher mit
'TaskPriorityChangeEvent' in globalThisoder'scheduler' in globalThis, ob die API vorhanden ist. options.previousPriorityist Pflicht. Fehlt es oder ist der Wert ungültig, wirft der Konstruktor einenTypeError.- Ein selbst ausgelöstes Ereignis ändert
TaskSignal.prioritynicht und plant keine Aufgaben um. Für echte Änderungen nutzt duTaskController.prototype.setPriority(). - Rufst du
setPriority()während eines laufendenprioritychange-Handlers auf, wirft der Browser eineNotAllowedError-DOMException. - Die API gibt es im Fenster-Kontext und in Web Workern, in Node.js aber nicht.