Interfejs JavaScript Promise Integration (JSPI) to interfejs API, który umożliwia synchronicznemu, sekwencyjnemu kodom skompilowanym do WebAssembly uzyskiwanie dostępu do asynchronicznych interfejsów API. Wiele interfejsów API sieci jest tworzonych w języku JavaScript z użyciem obietnic: zamiast natychmiastowego wykonania żądanej operacji zwracają obietnicę, aby to zrobić. Gdy działanie zostanie w końcu wykonane, wykonawca zadań przeglądarki wywołuje wszystkie funkcje wywołania zwrotnego z obietnicą. JSPI korzysta z tej architektury, aby umożliwić zawieszenie aplikacji WebAssembly po zwróceniu obietnicy i jej wznowienie po jej spełnieniu.
Od Chrome 123 do Chrome 128 interfejs JSPI jest dostępny jako testowanie origin. Więcej informacji o JSPI znajdziesz w artykule na blogu [WebAssembly] Wprowadzenie do interfejsu JSPI (JavaScript Promise Integration API) lub w projektie 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 funkcję dodawania 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 C na 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 JavaScriptie w ten sposób:
if ('Suspender' in WebAssembly) {
// JSPI is supported.
}
Demonstracja JSPI z poprzedniej próbki kodu jest dostępna na Glitch, a także umieszczona poniżej. Jeśli chcesz, możesz wyświetlić kod źródłowy wygenerowany przez Emscripten, ale interesujący kod to oryginalny program w języku C (kliknięcie tego linku spowoduje pobranie kodu).
Aby wypróbować JSPI z prawdziwymi użytkownikami aplikacji, zarejestruj się w ramach okresu próbnego wersji oryginalnej. Jeśli potrzebujesz instrukcji, przeczytaj artykuł Początkujący: okresy próbne pochodzenia. Zespół JSPI czeka na Twoją opinię na temat wersji próbnej (patrz krok 5 w instrukcjach), abyśmy mogli dostosować tę funkcję do Twoich potrzeb.