Atomics.waitAsync()
Atomics.waitAsync() 静的メソッドは、共有メモリー位置が指定された値を含むことを確認し、メモリー位置が指定された値と一致しない場合は文字列 "not-equal" を含む value プロパティを持つオブジェクトを即座に返し、タイムアウトが 0 に設定されている場合は "timed-out" を返します。それ以外の場合、このメソッドは、value プロパティが Promise であるオブジェクトを返し、これは Atomics.notify() が呼び出されたときに "ok"、またはタイムアウトが切れたときに "timed-out" で履行されます。
Atomics.waitAsync() および Atomics.notify() を一緒に使用すると、共有メモリー内の値に基づいてスレッドの同期を有効にすることができます。スレッドは、同期値が変更された場合、すぐに処理を続行することも、同期ポイントに到達したときに別のスレッドからの通知を待つこともできます。
このメソッドは、 SharedArrayBuffer のビューである Int32Array または BigInt64Array でのみ動作します。これはノンブロッキングであり、Atomics.wait() とは異なり、メインスレッドで使用することができます。スレッド全体をブロックしないため、プロミスが決定する前に共有メモリーにアクセスしないように注意する必要があります。
対応ブラウザ
| 機能 | デスクトップ | モバイル | ||||
|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Safari | Chrome Android | Safari iOS | |
| 90 | 90 | 145 | 16.4 | 90 | 16.4 | |
- このブラウザでは部分的にしか実装されていません
- このバージョンで機能が削除されました (90)
- Atomics.waitAsync()` メソッドがタイムアウトしない。バグ 40742782 を参照。
- このブラウザでは部分的にしか実装されていません
- このバージョンで機能が削除されました (90)
- Atomics.waitAsync()` メソッドがタイムアウトしない。バグ 40742782 を参照。
- このブラウザでは部分的にしか実装されていません
- このバージョンで機能が削除されました (90)
- Atomics.waitAsync()` メソッドがタイムアウトしない。バグ 40742782 を参照。
基本構文
const sab = new SharedArrayBuffer(4);
const int32 = new Int32Array(sab);
const { async: waitPromise } = Atomics.waitAsync(int32, 0, 0);
waitPromise.then(() => console.log('The value has been changed')); ライブデモ
Check Atomics.waitAsync support
Inspect the availability of the async waiting API.
Start an async wait
Create the shared memory setup and inspect the returned wait token.
Resolve a waitAsync promise
Wake the waiting promise with Atomics.notify after updating the value.
実務での使いどころ
-
Atomics.waitAsync() の活用
Atomics.waitAsync() 静的メソッドは、共有メモリー位置が指定された値を含むことを確認し、メモリー位置が指定された値と一致しない場合は文字列 "not-equal" を含む value プロパティを持つオブジェクトを即座に返し、タイムアウトが 0 に設定されている場合は "timed-out" を返します。
注意点
- 古いブラウザ(IE等)では対応していない。対象ブラウザを確認すること。
アクセシビリティ
- JavaScript による動的更新時は、aria-live リージョンで変更をスクリーンリーダーに通知する。