JavaScript Promise Integration (JSPI) to interfejs API, który umożliwia synchronicznemu sekwencyjnemu kodowi skompilowanemu do WebAssembly dostęp do asynchronicznych interfejsów Web API. Wiele interfejsów API sieci jest tworzonych w formie obietnic JavaScriptu: zamiast natychmiast wykonywać żądaną operację, zwracają obietnicę jej wykonania. Gdy działanie zostanie w końcu wykonane, narzędzie do wykonywania zadań w przeglądarce wywołuje wszystkie wywołania zwrotne z obietnicą. JSPI wykorzystuje tę architekturę, aby umożliwić zawieszenie aplikacji WebAssembly po zwróceniu obietnicy i wznowienie jej działania po rozwiązaniu obietnicy.
Od Chrome 123 do Chrome 128 JSPI jest dostępny w ramach wersji próbnej origin. Więcej informacji o JSPI znajdziesz w poście na blogu Introducing the WebAssembly JavaScript Promise Integration API lub w projekcie specyfikacji.
Aby lepiej zrozumieć, jak korzystać z tej funkcji, zapoznaj się z tym fragmentem programu w języku C, który oblicza ciąg Fibonacciego, zlecając dodawanie funkcji JavaScript.
// 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);
});
Aby skompilować ten program w języku C do WebAssembly, użyj tego polecenia, które wymaga pakietu Emscripten SDK.
emcc -O3 badfib.c -o index.html -s ASYNCIFY=2
Obsługę JSPI możesz wykryć w JavaScript w ten sposób:
if ('Suspender' in WebAssembly) {
// JSPI is supported.
}
Aby wypróbować JSPI z prawdziwymi użytkownikami aplikacji, zarejestruj się w programie testów źródła. Jeśli potrzebujesz instrukcji, przeczytaj artykuł Wprowadzenie do testów origin. Zespół JSPI czeka na Twoje opinie o okresie próbnym dotyczącym pochodzenia (patrz krok 5 w instrukcjach), aby dostosować tę funkcję do Twoich potrzeb, gdy zostanie udostępniona.