Start · Sprachen · JavaScript · Referenz · new TaskPriorityChangeEvent()

new TaskPriorityChangeEvent()

Methode

Erzeugt ein neues <code>TaskPriorityChangeEvent</code>, das die Priorität einer Aufgabe <em>vor</em> einer Prioritätsänderung in <code>previousPriority</code> mitführt.

seit JavaScript Chrome/Edge 94+, Firefox 142+; Safari: nicht unter Kategorie: webapi

Signatur

new TaskPriorityChangeEvent(type, options)

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:
  • previousPriority (Pflicht): "user-blocking", "user-visible" oder "background", also die Priorität vor der Änderung.

Rückgabewert

Typ
TaskPriorityChangeEvent
Beschreibung
Ein neues 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
prioritychange user-visible 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');
Priorität: background -> user-blocking Aufgabe läuft

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);
[ 'background' ] user-visible

// 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 globalThis oder 'scheduler' in globalThis, ob die API vorhanden ist.
  • options.previousPriority ist Pflicht. Fehlt es oder ist der Wert ungültig, wirft der Konstruktor einen TypeError.
  • Ein selbst ausgelöstes Ereignis ändert TaskSignal.priority nicht und plant keine Aufgaben um. Für echte Änderungen nutzt du TaskController.prototype.setPriority().
  • Rufst du setPriority() während eines laufenden prioritychange-Handlers auf, wirft der Browser eine NotAllowedError-DOMException.
  • Die API gibt es im Fenster-Kontext und in Web Workern, in Node.js aber nicht.