TaskController: setPriority() 方法

可用性有限

此特性不是基线特性,因为它在一些最广泛使用的浏览器中不起作用。

注意:此功能在 Web Workers 中可用。

TaskController 接口的 setPriority() 方法可以被调用来为该控制器的 signal 设置一个新的 优先级。如果一个优先级任务被 配置 为使用该信号,那么任务的优先级也会随之改变。

观察者可以通过派发一个 prioritychange 事件来得知优先级的变化。只有当优先级实际发生改变时,该方法才会通知(如果调用不会改变优先级,则不触发事件)。

请注意,任务优先级只能为 具有可变优先级的任务 更改。如果任务是不可变的,则该函数调用将被忽略。

语法

js
setPriority(priority)

参数

优先级

任务的 优先级。可选值之一:"user-blocking""user-visible""background"

返回值

无(undefined)。

异常

NotAllowedError DOMException

当已经有一个优先级更改正在运行时,开始一个新的优先级更改。

示例

首先,我们创建一个任务控制器。在这种情况下,我们没有指定优先级,因此它将默认为 user-visible

js
// Create a TaskController with default priority: 'user-visible'
const controller = new TaskController();

然后,我们将控制器的信号传递给 Scheduler.postTask() 方法。

js
// Post task passing the controller's signal.
// The signal priority sets the initial priority of the task
scheduler
  .postTask(() => "Task execute", { signal: controller.signal })
  .then((taskResult) => {
    console.log(`${taskResult}`);
  }) // Run on success)
  .catch((error) => {
    console.log(`Catch error: ${error}`);
  }); // Run on fail

之后,就可以使用该控制器来更改优先级了。

js
// Change the priority to 'background' using the controller
controller.setPriority("background");

其他示例,包括如何处理因更改优先级而产生的事件,可以在以下位置找到:优先级任务调度 API > 示例

规范

规范
优先任务调度
# dom-taskcontroller-setpriority

浏览器兼容性