Signatur
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
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');
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');
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 });
Ereignis selbst erzeugen (z. B. für Tests)
const event = new TaskPriorityChangeEvent('prioritychange', {
previousPriority: 'user-visible',
});
console.log(event.previousPriority);
// Wichtig · Fallstricke
- Neue Priorität: Das Ereignis selbst hat keine Eigenschaft für den neuen Wert. Lies ihn aus
event.target.priority(demTaskSignal). - Nur mit
TaskController:prioritychangewird nur ausgelöst, wennsetPriority()aufgerufen wird. Ein Signal ausTaskSignal.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()imprioritychange-Handler aufrufst, während eine Prioritätsänderung noch läuft, wird einNotAllowedError(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 globalThisbzw.typeof TaskController !== 'undefined', oder binde ein Polyfill ein.