TaskController

Khả dụng hạn chế

This feature is not Baseline because it does not work in some of the most widely-used browsers.

Note: This feature is available in Web Workers.

Giao diện TaskController của Prioritized Task Scheduling API đại diện cho một đối tượng điều khiển có thể được dùng để hủy và thay đổi mức ưu tiên của một hoặc nhiều tác vụ ưu tiên. Nếu không cần thay đổi mức ưu tiên của tác vụ, có thể dùng AbortController thay thế.

Một phiên bản TaskController mới được tạo bằng hàm khởi tạo TaskController(), tùy chọn chỉ định mức ưu tiên cho tín hiệu liên kết (một TaskSignal). Nếu không chỉ định, tín hiệu sẽ có mức ưu tiên mặc định là "user-visible".

Tín hiệu của bộ điều khiển có thể được truyền làm đối số cho phương thức Scheduler.postTask() cho một hoặc nhiều tác vụ. Đối với tác vụ có thể thay đổi (chỉ), tác vụ được khởi tạo với mức ưu tiên của tín hiệu và có thể được thay đổi sau bằng cách gọi TaskController.setPriority(). Đối với tác vụ không thể thay đổi, mọi mức ưu tiên được khởi tạo hoặc đặt bởi bộ điều khiển đều bị bỏ qua.

Các tác vụ có thể bị hủy bằng cách gọi abort() trên bộ điều khiển.

AbortController TaskController

Hàm khởi tạo

TaskController()

Tạo một đối tượng TaskController mới, tùy chọn chỉ định mức ưu tiên của signal liên kết.

Phương thức phiên bản

Giao diện này cũng kế thừa các phương thức của phần tử cha, AbortController.

TaskController.setPriority()

Đặt mức ưu tiên của signal của bộ điều khiển, và do đó là mức ưu tiên của bất kỳ tác vụ nào liên kết với nó. Điều này thông báo cho các trình quan sát về thay đổi mức ưu tiên bằng cách gửi sự kiện prioritychange.

Thuộc tính phiên bản

Giao diện này cũng kế thừa các thuộc tính của phần tử cha, AbortController.

TaskController.signal Read only

Trả về một phiên bản đối tượng TaskSignal. Tín hiệu được truyền vào các tác vụ để chúng có thể bị hủy hoặc thay đổi ưu tiên bởi bộ điều khiển. Thuộc tính này được kế thừa từ AbortController.

Ví dụ

Note: Các ví dụ "trực tiếp" bổ sung có thể tìm thấy tại: Ví dụ Prioritized Task Scheduling API.

Đầu tiên chúng ta tạo một bộ điều khiển tác vụ, đặt mức ưu tiên của tín hiệu liên kết thành user-blocking.

js
// Tạo TaskController, đặt mức ưu tiên tín hiệu là 'user-blocking'
const controller = new TaskController({ priority: "user-blocking" });

Sau đó chúng ta thêm trình nghe sự kiện cho các sự kiện prioritychange (ở đây addEventListener() được gọi, nhưng chúng ta cũng có thể gán trình xử lý cho TaskSignal.onprioritychange). Trình xử lý sử dụng previousPolicy trên sự kiện để lấy mức ưu tiên gốc và TaskSignal.priority trên mục tiêu sự kiện để lấy mức ưu tiên mới.

js
// Lắng nghe sự kiện 'prioritychange' trên tín hiệu của bộ điều khiển.
controller.signal.addEventListener("prioritychange", (event) => {
  const previousPriority = event.previousPriority;
  const newPriority = event.target.priority;
  console.log(`Priority changed from ${previousPriority} to ${newPriority}.`);
});

Chúng ta cũng có thể lắng nghe sự kiện abort như dưới đây. Cách tiếp cận tương tự sẽ được sử dụng nếu bộ điều khiển là AbortController.

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

Tiếp theo, chúng ta đăng tải tác vụ, truyền tín hiệu của bộ điều khiển vào đối số tùy chọn. Trong trường hợp này, tác vụ chỉ là một hàm mũi tên phân giải promise bằng cách trả về một số văn bản. Chúng ta sử dụng thencatch để xử lý khi tác vụ được phân giải hoặc bị từ chối.

js
// Đăng tải tác vụ sử dụng tín hiệu của bộ điều khiển.
scheduler
  .postTask(() => "Task execute", { signal: controller.signal })
  .then((taskResult) => {
    console.log(`${taskResult}`);
  }) // Bị hủy (sẽ không chạy)
  .catch((error) => {
    console.log(`Catch error: ${error}`);
  }); // Ghi lỗi

Chúng ta có thể dùng bộ điều khiển để quản lý tác vụ. Ở đây chúng ta có thể thay đổi mức ưu tiên bằng TaskController.setPriority(). Điều này sẽ kích hoạt sự kiện prioritychange liên quan.

js
// Thay đổi mức ưu tiên thành 'background' bằng bộ điều khiển
controller.setPriority("background");

Cuối cùng, tác vụ có thể bị hủy bằng cách gọi abort() trên bộ điều khiển.

js
// Hủy tác vụ
controller.abort();

Đầu ra console của ví dụ này sẽ là:

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

Thông số kỹ thuật

Thông số kỹ thuật
Prioritized Task Scheduling
# sec-task-controller

Tương thích trình duyệt