TaskSignal: prioritychange 事件

TaskSignalpriority 发生改变时,会向其发送 prioritychange 事件。

语法

在诸如 addEventListener() 的方法中使用事件名称,或设置事件处理程序属性。

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

onprioritychange = (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 表格只能在浏览器中加载