WebAssembly JavaScript Promise Integration (JSPI) entra a la prueba de origen

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 diseñan en términos de promesas de JavaScript: en lugar de realizar de inmediato la operación solicitada, devuelven una promesa para hacerlo. Cuando finalmente se realiza la acción, el ejecutor de tareas del navegador invoca cualquier devolución de llamada con la promesa. JSPI se conecta a esta arquitectura para permitir que se suspenda una aplicación de WebAssembly cuando se devuelve la promesa y que se reanude cuando se resuelve la promesa.

Desde Chrome 123 hasta Chrome 128, JSPI está disponible como prueba de origen. Obtén más información sobre la JSPI en la entrada de blog Introducing the WebAssembly JavaScript Promise Integration API o en el borrador de la especificación.

Para comprender mejor cómo usar esta función, considera el siguiente fragmento de un programa en C que calcula la secuencia de Fibonacci subcontratando la suma 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 en C a 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.
}

Para probar la JSPI con usuarios reales de tu aplicación, regístrate en la prueba de origen. Si necesitas instrucciones, lee Cómo comenzar a usar las pruebas de origen. El equipo de JSPI espera recibir tus comentarios sobre la prueba de origen (consulta el paso 5 de las instrucciones) para que la función se adapte a tus necesidades cuando se lance.