WebAssembly JavaScript Promise Integration (JSPI) entra no teste de origem

A integração de promessas do JavaScript (JSPI, na sigla em inglês) é uma API que permite que o código sequencial síncrono compilado para WebAssembly acesse APIs da Web assíncronas. Muitas APIs da Web são criadas em termos de promises do JavaScript: em vez de realizar imediatamente a operação solicitada, elas retornam uma promise para fazer isso. Quando a ação é finalmente realizada, o executor de tarefas do navegador invoca os callbacks com a promise. O JSPI se conecta a essa arquitetura para permitir que um aplicativo WebAssembly seja suspenso quando a promessa for retornada e retomado quando ela for resolvida.

Do Chrome 123 ao 128, a JSPI está disponível como um teste de origem. Saiba mais sobre a JSPI no post do blog Apresentamos a API JavaScript Promise Integration do WebAssembly ou no rascunho da especificação.

Para entender melhor como usar esse recurso, considere o seguinte trecho de um programa em C que calcula a sequência de Fibonacci terceirizando a adição para uma função 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 esse programa em C para WebAssembly, use o seguinte comando, que requer o SDK do Emscripten.

emcc -O3 badfib.c -o index.html -s ASYNCIFY=2

É possível detectar o suporte do JSPI em JavaScript da seguinte maneira:

if ('Suspender' in WebAssembly) {
  // JSPI is supported.
}

Para testar a JSPI com usuários reais do seu aplicativo, inscreva-se no teste de origem. Leia Começar a usar os testes de origem se precisar de instruções. A equipe do JSPI aguarda seu feedback sobre o teste de origem (consulte a Etapa 5 nas instruções) para que o recurso atenda às suas necessidades quando for lançado.