JavaScript Promise Integration (JSPI) adalah API yang memungkinkan kode berurutan sinkron yang dikompilasi ke WebAssembly untuk mengakses Web API asinkron. Banyak API Web dibuat dalam hal promise JavaScript: bukan langsung melakukan operasi yang diminta, API tersebut menampilkan promise untuk melakukannya. Saat tindakan akhirnya dilakukan, runner tugas browser akan memanggil callback apa pun dengan promise. JSPI terhubung ke dalam arsitektur ini untuk memungkinkan aplikasi WebAssembly ditangguhkan saat promise ditampilkan, dan untuk dilanjutkan saat promise diselesaikan.
Dari Chrome 123 hingga Chrome 128, JSPI tersedia sebagai uji coba origin. Pelajari JSPI lebih lanjut di postingan blog Memperkenalkan WebAssembly JavaScript Promise Integration API atau dari draf spesifikasi.
Untuk mendapatkan pemahaman yang lebih baik tentang cara menggunakan fitur ini, pertimbangkan cuplikan program C berikut yang menghitung urutan Fibonacci dengan melakukan outsourcing penambahan ke fungsi 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);
});
Untuk mengompilasi program C ini ke WebAssembly, gunakan perintah berikut, yang memerlukan Emscripten SDK.
emcc -O3 badfib.c -o index.html -s ASYNCIFY=2
Anda dapat mendeteksi dukungan JSPI dari JavaScript sebagai berikut:
if ('Suspender' in WebAssembly) {
// JSPI is supported.
}
Demo JSPI dari contoh kode sebelumnya tersedia di Glitch dan juga disematkan di bagian berikut. Anda dapat melihat kode sumber yang dihasilkan Emscripten jika ingin, tetapi kode yang benar-benar menarik adalah program C asli (mengklik link ini akan mendownload kode).
Untuk mencoba JSPI dengan pengguna sebenarnya dari aplikasi Anda, daftar untuk uji coba origin. Baca Memulai uji coba origin jika Anda memerlukan petunjuk. Tim JSPI menantikan masukan Anda tentang uji coba origin (lihat Langkah 5 dalam petunjuk) agar fitur ini sesuai dengan kebutuhan Anda saat dirilis.