Spec-Zone.ru › Web APIs

TaskController

Ограниченная доступность

Эта функция не является базовой, так как она не работает в некоторых из самых широко используемых браузеров.

  • Узнать больше
  • Полная совместимость
  • Отправить отзыв

Примечание: Эта функция доступна в Web Workers.

Интерфейс TaskController API планирования задач с приоритетами представляет собой объект-контроллер, который можно использовать для прерывания и изменения приоритета одной или нескольких задач с приоритетом. Если нет необходимости изменять приоритеты задач, вместо этого можно использовать AbortController.

Новый экземпляр TaskController создается с помощью конструктора TaskController(), необязательно указав приоритет для связанного сигнала (TaskSignal). Если он не указан, сигнал по умолчанию будет иметь приоритет "user-visible".

Сигнал контроллера может быть передан в качестве аргумента методу Scheduler.postTask() для одной или нескольких задач. Для изменяемых задач (только) задача инициализируется приоритетом сигнала и может быть позже изменена вызовом TaskController.setPriority(). Для неизменяемых задач любой приоритет, инициализированный или установленный контроллером, игнорируется.

Задачи могут быть прерваны путем вызова abort() на контроллере.

AbortController TaskController

Конструктор

TaskController()

Создает новый объект TaskController, необязательно указав приоритет его связанного signal.

Методы экземпляра

Этот интерфейс также наследует методы своего родителя, AbortController.

TaskController.setPriority()

Устанавливает приоритет сигнала контроллера signal, а следовательно, и приоритет всех задач, с которыми он связан. Это уведомляет наблюдателей об изменении приоритета, отправив событие prioritychange.

Свойства экземпляра

Этот интерфейс также наследует свойства своего родителя, AbortController.

TaskController.signal Только для чтения

Возвращает экземпляр объекта TaskSignal. Сигнал передается задачам, чтобы их можно было прервать или изменить приоритет контроллером. Свойство унаследовано от AbortController.

Примеры

Примечание: Дополнительные «живые» примеры можно найти в: Примерах API планирования задач с приоритетами.

Сначала мы создаем контроллер задач, устанавливая приоритет связанного сигнала в user-blocking.

// Create a TaskController, setting its signal priority to 'user-blocking'
const controller = new TaskController({ priority: "user-blocking" });

Затем мы добавляем обработчик событий для событий prioritychange (здесь вызывается addEventListener(), но мы могли бы вместо этого назначить обработчик в TaskSignal.onprioritychange). Обработчик использует previousPolicy в событии, чтобы получить исходный приоритет, и TaskSignal.priority на целевом объекте события, чтобы получить новый приоритет.

// Listen for 'prioritychange' events on the controller's signal.
controller.signal.addEventListener("prioritychange", (event) => {
  const previousPriority = event.previousPriority;
  const newPriority = event.target.priority;
  console.log(`Priority changed from ${previousPriority} to ${newPriority}.`);
});

Мы также можем прослушивать события abort, как показано ниже. Этот же подход использовался бы, если бы контроллер был AbortController.

controller.signal.addEventListener("abort", (event) => {
  console.log("Task aborted");
});

Далее мы публикуем задачу, передавая сигнал контроллера в необязательном аргументе. В этом случае задача — это просто стрелочная функция, которая разрешает обещание, возвращая некоторый текст. Мы используем then и catch для обработки случаев разрешения или отклонения задачи, регистрируя возвращаемый текст или ошибку в каждом случае. Обратите внимание, что в более позднем блоке кода мы прерываем задачу, поэтому будет выполняться только блок catch()!

// Post task using 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}`);
  }) // Aborted (won't run)
  .catch((error) => {
    console.log(`Catch error: ${error}`);
  }); // Log error

Мы можем использовать контроллер для управления задачей. Здесь мы можем изменить приоритет с помощью TaskController.setPriority(). Это вызовет связанное событие prioritychange.

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

Наконец, задачу можно прервать, вызвав abort() на контроллере.

// Abort the task
controller.abort();

Вывод консоли для этого примера будет:

The priority changed from user-blocking to background.
Task aborted
Catch error: AbortError

Спецификации

Спецификация
Планирование задач с приоритетами
# sec-task-controller

Совместимость с браузерами

Рабочий стол Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet WebView Android
TaskController 94 94 101 80 Нет 94 Нет 66 Нет 17.0 94
TaskController 94 94 101 80 Нет 94 Нет 66 Нет 17.0 94
setPriority 94 94 101 80 Нет 94 Нет 66 Нет 17.0 94

© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/TaskController

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API