L'intégration de promesses JavaScript (JSPI) est une API qui permet au code séquentiel synchrone compilé en WebAssembly d'accéder aux API Web asynchrones. De nombreuses API Web sont conçues en termes de promesses JavaScript : au lieu d'effectuer immédiatement l'opération demandée, elles renvoient une promesse pour ce faire. Lorsque l'action est finalement effectuée, le gestionnaire de tâches du navigateur appelle tous les rappels avec la promesse. JSPI s'intègre à cette architecture pour permettre à une application WebAssembly d'être suspendue lorsque la promesse est renvoyée et de reprendre son activité lorsque la promesse est résolue.
De Chrome 123 à Chrome 128, JSPI est disponible en version d'évaluation. Pour en savoir plus sur la page JSPI, consultez l'article de blog Present the WebAssembly JavaScript Promise Integration API (Présentation de l'API WebAssembly JavaScript Promise Integration) ou le projet de spécification.
Pour mieux comprendre comment utiliser cette fonctionnalité, considérez l'extrait de code C suivant qui calcule la séquence de Fibonacci en externalisant l'addition à une fonction 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);
});
Pour compiler ce programme C sur WebAssembly, utilisez la commande suivante, qui nécessite le SDK Emscripten.
emcc -O3 badfib.c -o index.html -s ASYNCIFY=2
Vous pouvez détecter la prise en charge de JSPI à partir de JavaScript comme suit:
if ('Suspender' in WebAssembly) {
// JSPI is supported.
}
Une démonstration de JSPI à partir de l'exemple de code précédent est disponible sur Glitch et également intégrée dans ce qui suit. Vous pouvez consulter le code source généré par Emscripten si vous le souhaitez, mais le code réellement intéressant est le programme C d'origine (cliquer sur ce lien permet de télécharger le code).
Pour essayer JSPI avec de vrais utilisateurs de votre application, inscrivez-vous à l'essai de l'origine. Consultez Premiers pas avec les essais d'origine si vous avez besoin d'instructions. L'équipe JSPI a hâte de recevoir vos commentaires concernant l'essai Origin Trial (voir l'étape 5 dans les instructions) afin que la fonctionnalité réponde à vos besoins lors de son expédition.