Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

TaskSignal: prioritychange-Ereignis

Eingeschränkt verfügbar

Diese Funktion ist nicht Baseline, da sie in einigen der am weitesten verbreiteten Browser nicht funktioniert.

Want more browser support for this feature? Tell us why.

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

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

Syntax

Verwenden Sie den Ereignisnamen in addEventListener():

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

Alternativ können Sie ihn der Event-Handler-Eigenschaft der Schnittstelle zuweisen:

js
onprioritychange = (event) => { }

Ereignistyp

Ein TaskPriorityChangeEvent. Erbt von Event.

Event TaskPriorityChangeEvent

Beispiele

Das folgende Beispiel zeigt, wie Sie auf das prioritychange-Ereignis eines TaskSignal reagieren.

Zunächst erstellen wir einen Controller und fügen seinem Signal einen Event-Listener hinzu. Bei der Verarbeitung des Ereignisses verwenden wir previousPriority am Ereignis, um die ursprüngliche Priorität zu ermitteln, und TaskSignal.priority am Ereignisziel, um die neue bzw. aktuelle Priorität zu ermitteln.

Anschließend wird die Aufgabe unter Übergabe des Signals eingeplant, und unmittelbar danach ändern wir 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 die benutzerdefinierte Logging-Funktion myLog(), um Meldungen im Textbereich unten auszugeben. Sie wird hier nicht gezeigt, da sie für das Beispiel nicht relevant ist.

Die folgende Ausgabe zeigt, dass sich die Priorität der Aufgabe von user-blocking zu background geändert hat. Dies geschieht, bevor die Aufgabe ausgeführt wird, könnte aber auch während ihrer Ausführung geschehen.

Spezifikationen

Spezifikation
Prioritized Task Scheduling
# eventdef-tasksignal-prioritychange
Prioritized Task Scheduling
# dom-tasksignal-onprioritychange

Browser-Kompatibilität