JavaScript Promise Integration (JSPI)은 WebAssembly로 컴파일된 동기 순차 코드가 비동기 웹 API에 액세스할 수 있도록 지원하는 API입니다. 많은 웹 API는 JavaScript 프로미스 측면에서 만들어집니다. 요청된 작업을 즉시 실행하는 대신 작업을 실행하는 프로미스를 반환합니다. 작업이 최종적으로 실행되면 브라우저의 작업 러너가 프로미스와 함께 콜백을 호출합니다. JSPI는 이 아키텍처에 연결되어 프라미스가 반환될 때 WebAssembly 애플리케이션이 일시중단되고 프라미스가 해결될 때 재개되도록 합니다.
Chrome 123부터 Chrome 128까지 JSPI는 오리진 트라이얼로 제공됩니다. 블로그 게시물 WebAssembly JavaScript Promise Integration API 소개 또는 사양 초안에서 JSPI에 대해 자세히 알아보세요.
이 기능의 사용 방법을 더 잘 이해하려면 덧셈을 JavaScript 함수에 아웃소싱하여 피보나치 수열을 계산하는 C 프로그램의 다음 발췌문을 참고하세요.
// This is C code.
long promiseFib(long x) {
if (x == 0)
return 0;
if (x == 1)
return 1;
// This is where the C code calls asynchronous JavaScript.
return promiseAdd(promiseFib(x - 1), promiseFib(x - 2));
}
// Addition artificially wrapped in a Promise.
EM_ASYNC_JS(long, promiseAdd, (long x, long y), {
// This is asynchronous JavaScript code.
return Promise.resolve(x+y);
});
이 C 프로그램을 WebAssembly로 컴파일하려면 Emscripten SDK가 필요한 다음 명령어를 사용하세요.
emcc -O3 badfib.c -o index.html -s ASYNCIFY=2
다음과 같이 JavaScript에서 JSPI 지원을 기능 감지할 수 있습니다.
if ('Suspender' in WebAssembly) {
// JSPI is supported.
}
애플리케이션의 실제 사용자와 함께 JSPI를 사용해 보려면 오리진 트라이얼에 가입하세요. 안내가 필요한 경우 오리진 트라이얼 시작하기를 참고하세요. JSPI팀은 기능이 출시될 때 사용자의 요구사항에 맞도록 오리진 트라이얼 의견 (안내의 5단계 참고)을 기다리고 있습니다.