TaskSignal: prioritychange 事件
当 TaskSignal
的 priority 发生改变时,会向其发送 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
的过程。这发生在任务执行之前,但也可以在任务运行时发生。
规范
规范 |
---|
优先级任务调度 # ref-for-eventdef-tasksignal-prioritychange |
优先级任务调度 # dom-tasksignal-onprioritychange |
浏览器兼容性
BCD 表格只能在浏览器中加载