JavaScript Promise Integration (JSPI) adalah API yang memungkinkan kode berurutan sinkron yang dikompilasi ke WebAssembly untuk mengakses Web API asinkron. Banyak Web API dibuat dalam bentuk promise JavaScript: daripada langsung melakukan operasi yang diminta, API ini menampilkan promise untuk melakukannya. Saat tindakan akhirnya dilakukan, task runner browser memanggil callback apa pun dengan promise. JSPI terhubung ke arsitektur ini untuk memungkinkan aplikasi WebAssembly ditangguhkan saat promise ditampilkan, dan dilanjutkan saat promise diselesaikan.
Mulai Chrome 123 hingga Chrome 128, JSPI tersedia sebagai uji coba origin. Pelajari JSPI lebih lanjut dalam postingan blog Introducing the WebAssembly JavaScript Promise Integration API atau dari draf spesifikasi.
Untuk lebih memahami cara menggunakan fitur ini, pertimbangkan kutipan program C berikut yang menghitung deret Fibonacci dengan meng-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.
}
Untuk mencoba JSPI dengan pengguna sebenarnya dari aplikasi Anda, daftar ke uji coba origin. Baca Memulai uji coba origin jika Anda memerlukan petunjuk. Tim JSPI menantikan masukan uji coba origin Anda (lihat Langkah 5 dalam petunjuk) agar fitur ini sesuai dengan kebutuhan Anda saat diluncurkan.