Atomics.waitAsync()
åºçº¿
2025
æè¿å¯ç¨
èª November 2025 èµ·ï¼æ¤ç¹æ§å·²å¨ææ°æµè§å¨ä¸å¾å°æ¯æãä½å¨è¾æ§çè®¾å¤ææµè§å¨ä¸å¯è½æ æ³è¿è¡ã
Atomics.waitAsync() éææ¹æ³å¼æ¥çå¾
å
±äº«å
åçç¹å®ä½ç½®å¹¶è¿åä¸ä¸ª Promiseã
ä¸ Atomics.wait() ä¸åï¼waitAsync æ¯éé»å¡çä¸å¯ç¨äºä¸»çº¿ç¨ã
夿³¨ï¼æ¤æä½ä»
éç¨äºåºäº SharedArrayBuffer ç Int32Array æ BigInt64Array è§å¾ã
è¯æ³
Atomics.waitAsync(typedArray, index, value)
Atomics.waitAsync(typedArray, index, value, timeout)
åæ°
typedArray-
åºäº
SharedArrayBufferçInt32ArrayæBigInt64Arrayã index-
typedArrayä¸è¦çå¾ çä½ç½®ã value-
è¦æµè¯çææå¼ã
timeoutå¯é-
çå¾ æ¶é´ï¼ä»¥æ¯«ç§ä¸ºåä½ã
NaNï¼ä»¥åä¼è¢«è½¬æ¢ä¸ºNaNçå¼ï¼ä¾å¦undefinedï¼ä¼è¢«è½¬æ¢ä¸ºInfinityãè´å¼ä¼è¢«è½¬æ¢ä¸º0ã
è¿åå¼
ä¸ä¸ª Objectï¼å
å«ä»¥ä¸å±æ§ï¼
async-
ä¸ä¸ªå¸å°å¼ï¼æç¤º
value屿§æ¯å¦ä¸ºPromiseã value-
妿
asyncæ¯falseï¼å®å°æ¯ä¸ä¸ªå 容为"not-equal"æ"timed-out"çå符串ï¼ä» å½timeoutåæ°ä¸º0æ¶ï¼ã妿asyncæ¯trueï¼å®å°ä¼æ¯ä¸ä¸ªPromiseï¼å ¶å ç°å¼ä¸ºä¸ä¸ªå 容为"ok"æ"timed-out"çå符串ãè¿ä¸ª promise æ°¸è¿ä¸ä¼è¢«æç»ã
å¼å¸¸
TypeError-
妿
typedArray䏿¯ä¸ä¸ªåºäºSharedArrayBufferçInt32ArrayæBigInt64Arrayï¼åæåºè¯¥å¼å¸¸ã RangeError-
妿
indexè¶ åºtypedArrayçèå´ï¼åæåºè¯¥å¼å¸¸ã
示ä¾
>ä½¿ç¨ waitAsync()
ç»å®ä¸ä¸ªå
±äº«ç Int32Arrayã
const sab = new SharedArrayBuffer(1024);
const int32 = new Int32Array(sab);
令ä¸ä¸ªè¯»å线ç¨ä¼ç å¹¶å¨ä½ç½® 0 å¤çå¾
ï¼é¢æè¯¥ä½ç½®çå¼ä¸º 0ãresult.value å°æ¯ä¸ä¸ª promiseã
const result = Atomics.waitAsync(int32, 0, 0, 1000);
// { async: true, value: Promise {<pending>} }
å¨è¯¥è¯»åçº¿ç¨æå¦ä¸ä¸ªçº¿ç¨ä¸ï¼å¯¹å
åä½ç½® 0 è°ç¨ä»¥ä»¤è¯¥ promise è§£å³ä¸º "ok"ã
Atomics.notify(int32, 0);
// { async: true, value: Promise {<fulfilled>: 'ok'} }
妿宿²¡æè§£å³ä¸º "ok"ï¼åå
±äº«å
å该ä½ç½®çå¼ä¸ç¬¦å颿ï¼value å°æ¯ "not-equal" è䏿¯ä¸ä¸ª promiseï¼æå·²ç»è¶
æ¶ï¼è¯¥ promise å°è§£å³ä¸º "time-out"ï¼ã
è§è
| è§è |
|---|
| ECMAScript® 2027 Language Specification> # sec-atomics.waitasync> |