L'integrazione di JavaScript Promise (JSPI) è un'API che consente al codice sequenziale sincrono compilato in WebAssembly di accedere alle API web asincrone. Molte API web sono create in termini di promesse JavaScript: anziché eseguire immediatamente l'operazione richiesta, restituiscono una promessa di farlo. Quando l'azione viene finalmente eseguita, il task runner del browser richiama i callback con la promessa. JSPI si integra in questa architettura per consentire la sospensione di un'applicazione WebAssembly quando viene restituita la promessa e la ripresa quando la promessa viene risolta.
Da Chrome 123 a Chrome 128, JSPI è disponibile come prova dell'origine. Scopri di più su JSPI nel post del blog Introducing the WebAssembly JavaScript Promise Integration API o nella bozza della specifica.
Per comprendere meglio come utilizzare questa funzionalità, considera il seguente estratto di un programma C che calcola la sequenza di Fibonacci esternalizzando l'addizione a una funzione 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);
});
Per compilare questo programma C in WebAssembly, utilizza il comando seguente, che richiede l'SDK Emscripten.
emcc -O3 badfib.c -o index.html -s ASYNCIFY=2
Puoi rilevare il supporto JSPI da JavaScript nel seguente modo:
if ('Suspender' in WebAssembly) {
// JSPI is supported.
}
Per provare JSPI con utenti reali della tua applicazione, registrati alla prova dell'origine. Leggi Inizia a utilizzare le prove di origine se hai bisogno di istruzioni. Il team JSPI non vede l'ora di ricevere il tuo feedback sulla prova dell'origine (vedi il passaggio 5 nelle istruzioni) in modo che la funzionalità soddisfi le tue esigenze quando verrà rilasciata.