Atomics.waitAsync()

Baseline 2025
Newly available

Since November 2025, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.

Phương thức tĩnh Atomics.waitAsync() xác minh rằng một vị trí bộ nhớ chia sẻ chứa một giá trị đã cho, trả về ngay lập tức một đối tượng với thuộc tính value chứa chuỗi "not-equal" nếu vị trí bộ nhớ không khớp với giá trị đã cho, hoặc "timed-out" nếu thời gian chờ được đặt thành 0. Ngược lại phương thức trả về một đối tượng trong đó thuộc tính value là một Promise được thực hiện với "ok" khi Atomics.notify() được gọi, hoặc "timed-out" nếu hết thời gian chờ.

Atomics.waitAsync()Atomics.notify() được sử dụng cùng nhau để cho phép đồng bộ hóa luồng dựa trên một giá trị trong bộ nhớ chia sẻ. Một luồng có thể tiến lên ngay lập tức nếu giá trị đồng bộ hóa đã thay đổi, hoặc nó có thể chờ thông báo từ một luồng khác khi đến điểm đồng bộ hóa.

Phương thức này chỉ hoạt động với Int32Array hoặc BigInt64Array xem một SharedArrayBuffer. Nó không chặn và, không giống Atomics.wait(), có thể được sử dụng trên luồng chính. Vì nó không chặn toàn bộ luồng, bạn vẫn cần cẩn thận không truy cập bộ nhớ chia sẻ trước khi promise được giải quyết.

Cú pháp

js
Atomics.waitAsync(typedArray, index, value)
Atomics.waitAsync(typedArray, index, value, timeout)

Tham số

typedArray

Một Int32Array hoặc BigInt64Array xem một SharedArrayBuffer.

index

Vị trí trong typedArray để chờ.

value

Giá trị kỳ vọng cần kiểm tra.

timeout Optional

Thời gian chờ tính bằng mili giây. NaN (và các giá trị được chuyển đổi thành NaN, chẳng hạn như undefined) trở thành Infinity. Các giá trị âm trở thành 0.

Giá trị trả về

Một Object với các thuộc tính sau:

async

Một boolean chỉ ra liệu thuộc tính value có phải là Promise hay không.

value

Nếu asyncfalse, nó sẽ là một chuỗi là "not-equal" hoặc "timed-out" (chỉ khi tham số timeout0). Nếu asynctrue, nó sẽ là một Promise được thực hiện với giá trị chuỗi, hoặc "ok" hoặc "timed-out". Promise không bao giờ bị từ chối.

Ngoại lệ

TypeError

Được ném ra nếu typedArray không phải là Int32Array hoặc BigInt64Array xem một SharedArrayBuffer.

RangeError

Được ném ra nếu index nằm ngoài giới hạn trong typedArray.

Ví dụ

Lưu ý rằng các ví dụ này không thể chạy trực tiếp từ console hoặc một trang web tùy ý, vì SharedArrayBuffer không được định nghĩa trừ khi các yêu cầu bảo mật của nó được đáp ứng.

Sử dụng Atomics.waitAsync()

Cho một Int32Array được chia sẻ:

js
// Create a SharedArrayBuffer with a size in bytes
const sab = new SharedArrayBuffer(1024);
const int32 = new Int32Array(sab);

Luồng đọc đang ngủ và chờ tại vị trí 0 mà giá trị kỳ vọng là 0. result.value sẽ là một promise.

js
const result = Atomics.waitAsync(int32, 0, 0, 1000);
// { async: true, value: Promise {<pending>} }

Trong luồng đọc hoặc trong một luồng khác, vị trí bộ nhớ 0 được gọi và promise có thể được giải quyết với "ok".

js
Atomics.notify(int32, 0);
// { async: true, value: Promise {<fulfilled>: 'ok'} }

Nếu nó không giải quyết thành "ok", giá trị trong vị trí bộ nhớ chia sẻ không phải là giá trị kỳ vọng (value sẽ là "not-equal" thay vì một promise) hoặc thời gian chờ đã đến (promise sẽ giải quyết thành "timed-out").

Đặc tả kỹ thuật

Specification
ECMAScript® 2027 Language Specification
# sec-atomics.waitasync

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

Xem thêm