Atomics.waitAsync()

Atomics.waitAsync() 정적 메서드는 공유 메모리 위치에서 비동기적으로 대기하고 Promise를 반환합니다.

Atomics.wait()와는 다르게, waitAsync는 논 블록킹이며 메인 스레드에서 사용할 수 있습니다.

참고: 이 작업은 오직 공유된 Int32Array 혹은 BigInt64Array에서만 동작합니다.

구문

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

매개변수

typedArray

공유된 Int32Array 혹은 BigInt64Array.

index

typedArray에서의 대기하고 있는 인덱스.

value

테스트할 기대값.

timeout Optional

대기 시간(밀리초). 시간이 명시되지 않으면 Infinity입니다.

반환 값

다음 속성을 가진 Object.

  • async
    • value 속성이 Promise인지 아닌지를 나타내는 부울입니다.
  • value
    • asyncfalse이면, "not-equal" 또는 "time-out"(timeout 매개변수가 0인 경우에만) 문자열일 수 있습니다. asynctrue이면 "ok" 또는 "timed-out" 문자열 값으로 이행되는 Promise가 됩니다. 프로미스는 절대 거부되지 않습니다.

예제

waitAsync() 사용하기

공유된 Int32Array에서

js
const sab = new SharedArrayBuffer(1024);
const int32 = new Int32Array(sab);

읽기 스레드가 0이 될 것으로 예상되는 위치 0에서 대기 중입니다. result.value은 프로미스입니다.

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

읽기 스레드 또는 다른 스레드에서 메모리 위치 0이 호출되고 이행 결과 "ok" 문자열을 확인할 수 있습니다.

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

"ok"으로 확인되지 않는다면 2가지 원인이 있습니다. 첫 번째 원인은 공유 메모리 위치의 값이 예상과 다른 경우인데 이 경우 value는 프로미스 대신 "not-equal"이 될 됩니다. 두 번째 원인은 시간이 만료(타임아웃)될 경우로 프로미스 결과는 문자열 "time-out"입니다.

명세서

Specification
ECMAScript Language Specification
# sec-atomics.waitasync

브라우저 호환성

BCD tables only load in the browser

같이 보기