DedicatedWorkerGlobalScope: postMessage() method
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Note: This feature is only available in Dedicated Web Workers.
Phương thức postMessage() của giao diện DedicatedWorkerGlobalScope gửi một thông điệp đến luồng chính đã khởi tạo worker.
Phương thức này nhận một tham số dữ liệu, chứa dữ liệu được sao chép từ worker sang luồng chính. Dữ liệu có thể là bất kỳ giá trị hoặc đối tượng JavaScript nào được thuật toán structured clone xử lý, bao gồm cả các tham chiếu vòng.
Phương thức này cũng nhận một mảng tùy chọn gồm các đối tượng có thể chuyển để transfer sang luồng chính; khác với tham số dữ liệu, các đối tượng đã chuyển không còn có thể dùng trong luồng worker nữa. (Khi có thể, các đối tượng được chuyển bằng một thao tác zero-copy hiệu năng cao.)
Phạm vi chính đã khởi tạo worker có thể gửi lại thông tin cho luồng đã khởi tạo nó bằng phương thức Worker.postMessage.
Cú pháp
postMessage(message)
postMessage(message, transfer)
postMessage(message, options)
Tham số
message-
Đối tượng cần gửi đến luồng chính; đối tượng này sẽ nằm trong trường dữ liệu của sự kiện được gửi đến sự kiện
message. Đây có thể là bất kỳ giá trị hoặc đối tượng JavaScript nào được thuật toán structured clone xử lý, bao gồm cả các tham chiếu vòng. transferOptional-
Một mảng tùy chọn gồm các đối tượng có thể chuyển để chuyển quyền sở hữu. Quyền sở hữu của các đối tượng này được trao cho phía đích và chúng không còn có thể dùng ở phía gửi. Các đối tượng có thể chuyển này nên được gắn với thông điệp; nếu không, chúng sẽ được di chuyển nhưng không thực sự truy cập được ở phía nhận.
optionsOptional-
Một đối tượng tùy chọn chứa các thuộc tính sau:
transferOptional-
Có ý nghĩa giống với tham số
transfer.
Giá trị trả về
Không có (undefined).
Ví dụ
Đoạn mã sau cho thấy worker.js, trong đó một bộ xử lý onmessage được dùng để xử lý thông điệp từ script chính.
Bên trong bộ xử lý, một phép tính được thực hiện để tạo ra một thông điệp kết quả; sau đó thông điệp này được gửi lại luồng chính bằng postMessage(workerResult);
onmessage = (e) => {
console.log("Message received from main script");
const workerResult = `Result: ${e.data[0] * e.data[1]}`;
console.log("Posting message back to main script");
postMessage(workerResult);
};
Trong script chính, onmessage phải được gọi trên một Worker object, trong khi bên trong worker script bạn chỉ cần onmessage vì worker về bản chất chính là phạm vi global (DedicatedWorkerGlobalScope).
Để xem ví dụ đầy đủ, hãy xem Ví dụ worker dedicated cơ bản (chạy worker dedicated).
Note:
postMessage() chỉ có thể gửi một đối tượng tại một thời điểm. Như đã thấy ở trên, nếu bạn muốn truyền nhiều giá trị thì có thể gửi một mảng.
Đặc tả kỹ thuật
| Specification |
|---|
| HTML> # dom-dedicatedworkerglobalscope-postmessage-dev> |
Tương thích trình duyệt
Xem thêm
Giao diện DedicatedWorkerGlobalScope mà nó thuộc về.