La integración de promesas de JavaScript (JSPI) es una API que permite que el código secuencial síncrono compilado en WebAssembly acceda a las APIs web asíncronas. Muchas APIs web se crean en términos de promesas de JavaScript: en lugar de realizar inmediatamente la operación solicitada, muestran una promesa para hacerlo. Cuando se realiza la acción por fin, el ejecutor de tareas del navegador invoca cualquier devolución de llamada con la promesa. JSPI se vincula a esta arquitectura para permitir que una aplicación de WebAssembly se suspenda cuando se muestra la promesa y que se reanude cuando se resuelva.
Desde Chrome 123 hasta Chrome 128, JSPI está disponible como prueba de origen. Obtén más información sobre JSPI en la entrada de blog Presentamos la API de integración de promesas de JavaScript de WebAssembly o en el borrador de la especificación.
Para comprender mejor cómo usar esta función, considera el siguiente fragmento de un programa C que calcula la secuencia de Fibonacci subcontratando la adición a una función de 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);
});
Para compilar este programa C en WebAssembly, usa el siguiente comando, que requiere el SDK de Emscripten.
emcc -O3 badfib.c -o index.html -s ASYNCIFY=2
Puedes detectar la compatibilidad con JSPI desde JavaScript de la siguiente manera:
if ('Suspender' in WebAssembly) {
// JSPI is supported.
}
Hay una demostración de JSPI de la muestra de código anterior disponible en Glitch y también incorporada a continuación. Puedes ver el código fuente generado por Emscripten si lo deseas, pero el código realmente interesante es el programa C original (si haces clic en este vínculo, se descargará el código).
Para probar JSPI con usuarios reales de tu aplicación, regístrate en la prueba de origen. Lee Cómo comenzar a usar las pruebas de origen si necesitas instrucciones. El equipo de JSPI espera recibir tus comentarios sobre la prueba de origen (consulta el Paso 5 en las instrucciones) para que la función se adapte a tus necesidades cuando se envíe.