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() và 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
Atomics.waitAsync(typedArray, index, value)
Atomics.waitAsync(typedArray, index, value, timeout)
Tham số
typedArray-
Một
Int32ArrayhoặcBigInt64Arrayxem mộtSharedArrayBuffer. index-
Vị trí trong
typedArrayđể chờ. value-
Giá trị kỳ vọng cần kiểm tra.
timeoutOptional-
Thời gian chờ tính bằng mili giây.
NaN(và các giá trị được chuyển đổi thànhNaN, chẳng hạn nhưundefined) trở thànhInfinity. Các giá trị âm trở thành0.
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
valuecó phải làPromisehay không. value-
Nếu
asynclàfalse, nó sẽ là một chuỗi là"not-equal"hoặc"timed-out"(chỉ khi tham sốtimeoutlà0). Nếuasynclàtrue, nó sẽ là mộtPromiseđượ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
typedArraykhông phải làInt32ArrayhoặcBigInt64Arrayxem mộtSharedArrayBuffer. RangeError-
Được ném ra nếu
indexnằm ngoài giới hạn trongtypedArray.
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ẻ:
// 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.
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".
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> |