TaskSignal:prioritychange 事件
注意:此功能在 Web Workers 中可用。
當 TaskSignal 的 優先順序 發生變化時,會向其傳送 prioritychange 事件。
語法
在諸如 addEventListener() 之類的方法中使用事件名稱,或設定事件處理程式屬性。
js
addEventListener("prioritychange", (event) => { })
onprioritychange = (event) => { }
事件型別
一個 TaskPriorityChangeEvent。繼承自 Event。
事件屬性
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 |
瀏覽器相容性
載入中…