TaskController
Ограниченная доступность
Эта функция не является базовой, так как она не работает в некоторых из самых широко используемых браузеров.
Примечание: Эта функция доступна в Web Workers.
Интерфейс TaskController API планирования задач с приоритетами представляет собой объект-контроллер, который можно использовать для прерывания и изменения приоритета одной или нескольких задач с приоритетом. Если нет необходимости изменять приоритеты задач, вместо этого можно использовать AbortController.
Новый экземпляр TaskController создается с помощью конструктора TaskController(), необязательно указав приоритет для связанного сигнала (TaskSignal). Если он не указан, сигнал по умолчанию будет иметь приоритет "user-visible".
Сигнал контроллера может быть передан в качестве аргумента методу Scheduler.postTask() для одной или нескольких задач. Для изменяемых задач (только) задача инициализируется приоритетом сигнала и может быть позже изменена вызовом TaskController.setPriority(). Для неизменяемых задач любой приоритет, инициализированный или установленный контроллером, игнорируется.
Задачи могут быть прерваны путем вызова abort() на контроллере.
Конструктор
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
Спецификации
Совместимость с браузерами
| Рабочий стол | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| 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