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 |
浏览器兼容性
加载中…