TaskSignal: prioritychange-Ereignis

Limited availability

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

Hinweis: Diese Funktion ist in Web Workers verfügbar.

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

Syntax

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

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

onprioritychange = (event) => { }

Ereignistyp

Eigenschaften des Ereignisses

TaskPriorityChangeEvent.previousPriority

Gibt die vorherige Priorität des Tasks an (bevor sie geändert wurde). Die neue/aktualisierte Priorität wird aus event.target.priority (TaskSignal.priority) gelesen.

Beispiele

Das untenstehende Beispiel zeigt, wie man auf das prioritychange-Ereignis bei einem TaskSignal hört.

Zuerst erstellen wir einen Controller und fügen einen Ereignislistener zu seinem Signal hinzu. Beim Handling des Ereignisses nutzen wir previousPriority beim Ereignis, um die ursprüngliche Priorität zu erhalten und TaskSignal.priority beim Ereignisziel, um die neue/aktuelle Priorität zu erhalten.

Der Task wird dann gepostet, das Signal wird übergeben, und die Priorität wird sofort geändert.

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 Protokollfunktion myLog(), um in das Textfeld unten zu protokollieren. Dies ist verborgen, da es für das Beispiel nicht relevant ist.

Die unten stehende Ausgabe demonstriert, dass sich die Priorität des Tasks von user-blocking auf background ändert. Dies geschieht, bevor der Task ausgeführt wird, könnte aber auch passieren, wenn der Task ausgeführt wird.

Spezifikationen

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

Browser-Kompatibilität