A integração de promessas do JavaScript (JSPI) é 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 promessas do JavaScript: em vez de executar imediatamente a operação solicitada, elas retornam uma promessa para fazer isso. Quando a ação é finalmente realizada, o executor de tarefas do navegador invoca todos os callbacks com a promessa. O JSPI se conecta a essa arquitetura para permitir que um aplicativo da WebAssembly seja suspenso quando a promessa for retornada e retomado quando a promessa for resolvida.
Do Chrome 123 até o Chrome 128, a JSPI está disponível como um teste de origem. Saiba mais sobre a JSPI na postagem do blog Introdução à API de integração de promessas JavaScript do WebAssembly ou no rascunho da especificação.
Para entender melhor como usar esse recurso, considere o seguinte excerto de um programa 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 C para o WebAssembly, use o comando a seguir, que requer o SDK 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.
}
Uma demonstração do JSPI do exemplo de código anterior está disponível no Glitch e também incorporada no seguinte. Você pode conferir o código-fonte gerado pelo Emscripten, mas o código realmente interessante é o programa C original. Clique neste link para fazer o download do código.
Para testar a JSPI com usuários reais do seu app, inscreva-se no teste de origem. Leia Começar a usar testes de origem se precisar de instruções. A equipe do JSPI está ansiosa para receber seu feedback de teste de origem (consulte a etapa 5 nas instruções) para que o recurso se ajuste às suas necessidades quando for lançado.