TaskSignal: prioritychange Ereignis

Limited availability

This feature is not Baseline because it does not work in some of the most widely-used browsers.

Hinweis: Dieses Feature ist verfügbar in Web Workers.

Das prioritychange Ereignis wird an ein TaskSignal gesendet, wenn dessen Priorität geändert wird.

Syntax

Verwenden Sie den Ereignisnamen in Methoden wie addEventListener() oder setzen Sie eine Ereignishandler-Eigenschaft.

js
addEventListener("prioritychange", (event) => {});

onprioritychange = (event) => {};

Ereignistyp

Ereigniseigenschaften

TaskPriorityChangeEvent.previousPriority

Gibt die vorherige Priorität der Aufgabe an (bevor sie geändert wurde). Die neue/aktualisierte Priorität wird von event.target.priority (TaskSignal.priority) ausgelesen.

Beispiele

Das folgende Beispiel zeigt, wie man auf das prioritychange Ereignis an einem TaskSignal hört.

Zuerst erstellen wir einen Controller und fügen seinem Signal einen Ereignislistener hinzu. Bei der Behandlung des Ereignisses verwenden wir previousPriority, um die ursprüngliche Priorität zu erhalten, und TaskSignal.priority am Ereignisziel, um die neue/aktuelle Priorität zu erhalten.

Die Aufgabe wird dann gepostet, indem das Signal übergeben wird, und dann ändern wir sofort die Priorität.

js
if ("scheduler" in this) {
  // Declare a TaskController, setting its signal priority to 'user-blocking'
  const controller = new TaskController({ priority: "user-blocking" });

  // Listen for 'prioritychange' events on the controller's signal.
  controller.signal.addEventListener("prioritychange", (event) => {
    const previousPriority = event.previousPriority;
    const newPriority = event.target.priority;
    myLog(`Priority changed from ${previousPriority} to ${newPriority}.`);
  });

  // Post task using the controller's signal.
  // The signal priority sets the initial priority of the task
  scheduler.postTask(
    () => {
      myLog("Task 1");
    },
    { signal: controller.signal },
  );

  // Change the priority to 'background' using the controller
  controller.setPriority("background");
}

Hinweis: Der obige Code verwendet eine benutzerdefinierte Protokollierungsfunktion myLog(), um in das untenstehende Textfeld zu protokollieren. Dies ist ausgeblendet, da es für das Beispiel nicht relevant ist.

Die untenstehende Ausgabe zeigt, dass sich die Priorität der Aufgabe von user-blocking zu background geändert hat. Dies passiert, bevor die Aufgabe ausgeführt wird, könnte aber auch passieren, während die Aufgabe läuft.

Spezifikationen

Specification
Prioritized Task Scheduling
# ref-for-eventdef-tasksignal-prioritychange
Prioritized Task Scheduling
# dom-tasksignal-onprioritychange

Browser-Kompatibilität

BCD tables only load in the browser