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 w internecie. 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 łączy się z tą architekturą, aby umożliwić zawieszenie aplikacji WebAssembly po zwróceniu obietnicy i wznawianie po spełnieniu obietnicy.
Od wersji Chrome 123 do Chrome 128 interfejs JSPI jest dostępny w ramach wersji próbnej 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 w C do WebAssembly, użyj poniższego polecenia, które wymaga 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ć wygenerowany przez Emscripten kod źródłowy, ale interesujący nas 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 źródeł. Zespół JSPI czeka na Twoją opinię o wersji próbnej origin (zobacz krok 5 w instrukcjach), aby po wysłaniu funkcji spełniła ona Twoje potrzeby.