JavaScript Promise Integration (JSPI) is een API waarmee synchrone sequentiële code die is gecompileerd naar WebAssembly toegang krijgt tot asynchrone web-API's. Veel web-API's zijn gemaakt in termen van JavaScript- beloften : in plaats van de gevraagde bewerking onmiddellijk uit te voeren, geven ze een belofte terug om dit te doen. Wanneer de actie uiteindelijk wordt uitgevoerd, roept de taskrunner van de browser eventuele callbacks aan met de belofte. JSPI haakt in op deze architectuur om het mogelijk te maken dat een WebAssembly-applicatie wordt opgeschort wanneer de belofte wordt geretourneerd, en wordt hervat wanneer de belofte wordt opgelost.
Van Chrome 123 tot Chrome 128 is JSPI beschikbaar als origin-proefversie . Lees meer over JSPI in de blogpost Introductie van de WebAssembly JavaScript Promise Integration API of in het specificatieconcept .
Om een beter begrip te krijgen van hoe u deze functie kunt gebruiken, kunt u het volgende fragment bekijken van een C-programma dat de Fibonacci-reeks berekent door de toevoeging aan een JavaScript-functie uit te besteden.
// 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);
});
Om dit C-programma naar WebAssembly te compileren, gebruikt u de volgende opdracht, waarvoor de Emscripten SDK vereist is.
emcc -O3 badfib.c -o index.html -s ASYNCIFY=2
U kunt als volgt JSPI-ondersteuning vanuit JavaScript detecteren:
if ('Suspender' in WebAssembly) {
// JSPI is supported.
}
Een demo van JSPI uit het vorige codevoorbeeld is beschikbaar op Glitch en ook ingesloten in het volgende. Je kunt de door Emscripten gegenereerde broncode zien als je wilt, maar de feitelijk interessante code is het originele C-programma (als je op deze link klikt, wordt de code gedownload).
Als u JSPI wilt uitproberen met echte gebruikers van uw applicatie, meldt u zich aan voor de origin-proefversie . Lees Aan de slag met origin-proefversies als u instructies nodig heeft. Het JSPI-team kijkt uit naar uw feedback over de herkomstproef (zie stap 5 in de instructies), zodat de functie aan uw behoeften voldoet wanneer deze wordt verzonden!