TaskSignal:prioritychange 事件

可用性有限

此特性不是基線特性,因為它在一些最廣泛使用的瀏覽器中不起作用。

注意:此功能在 Web Workers 中可用。

TaskSignal優先順序 發生變化時,會向其傳送 prioritychange 事件。

語法

在諸如 addEventListener() 之類的方法中使用事件名稱,或設定事件處理程式屬性。

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

onprioritychange = (event) => { }

事件型別

一個 TaskPriorityChangeEvent。繼承自 Event

Event TaskPriorityChangeEvent

事件屬性

TaskPriorityChangeEvent.previousPriority

指示任務更改前的原始優先順序。新的/更新的優先順序可以從 event.target.priority(即 TaskSignal.priority)中讀取。

示例

下面的示例演示瞭如何監聽 TaskSignal 上的 prioritychange 事件。

首先,我們建立一個控制器,併為其訊號新增一個事件監聽器。在處理事件時,我們使用事件上的 previousPriority 來獲取原始優先順序,並使用事件目標上的 TaskSignal.priority 來獲取新的/當前優先順序。

然後,在釋出任務時傳入訊號,並立即更改優先順序。

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");
}

注意: 上面的程式碼使用了自定義的日誌記錄函式 myLog() 來將日誌輸出到下面的文字區域。此函式被隱藏起來,因為它與示例無關。

下面的輸出顯示了任務的 優先順序user-blocking 更改為了 background。這種情況發生在任務執行之前,但也可能發生在任務執行時。

規範

規範
優先任務排程
# eventdef-tasksignal-prioritychange
優先任務排程
# dom-tasksignal-onprioritychange

瀏覽器相容性