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

浏览器兼容性