JavaScript Promise Integration (JSPI), WebAssembly'e derlenen eşzamanlı sıralı kodun, eşzamansız Web API'lerine erişmesine olanak tanıyan bir API'dir. Birçok Web API'si, JavaScript sözleşmeleri açısından tasarlanmıştır: istenen işlemi hemen gerçekleştirmek yerine, bunu yapmak için bir sözleşme döndürürler. İşlem sonunda gerçekleştirildiğinde, tarayıcının görev yürütücüsü, sözleşmeyle tüm geri çağırma işlevlerini çağırır. JSPI, bir WebAssembly uygulamasının söz döndürüldüğünde askıya alınmasına ve söz çözüldüğünde devam ettirilmesine izin vermek için bu mimariye bağlanır.
Chrome 123'ten Chrome 128'e kadar JSPI, kaynak denemesi olarak kullanılabilir. JSPI hakkında daha fazla bilgi edinmek için WebAssembly JavaScript Promise Integration API'yi tanıtıyoruz başlıklı blog yayınını veya özet taslağı inceleyin.
Bu özelliğin nasıl kullanılacağını daha iyi anlamak için aşağıdaki C programından alınan ve toplama işlemini bir JavaScript işlevine dış kaynak yaparak Fibonacci dizisini hesaplayan alıntıyı inceleyin.
// 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);
});
Bu C programını WebAssembly olarak derlemek için Emscripten SDK'sının gerekli olduğu aşağıdaki komutu kullanın.
emcc -O3 badfib.c -o index.html -s ASYNCIFY=2
JavaScript'te JSPI desteğini şu şekilde algılayabilirsiniz:
if ('Suspender' in WebAssembly) {
// JSPI is supported.
}
Önceki kod örneğindeki JSPI demosunu Glitch'te ve aşağıdakine yerleştirilmiş olarak bulabilirsiniz. İsterseniz Emscripten tarafından oluşturulan kaynak kodunu görebilirsiniz ancak asıl ilginç olan kod orijinal C programıdır (bu bağlantıyı tıkladığınızda kod indirilir).
JSPI'yi uygulamanızın gerçek kullanıcılarıyla denemek için orijinal deneme sürümüne kaydolun. Talimatlara ihtiyacınız varsa Kaynak denemelerini kullanmaya başlama başlıklı makaleyi okuyun. JSPI ekibi, özelliğin kullanıma sunulduğunda ihtiyaçlarınıza uygun olması için ilk denemeyle ilgili geri bildiriminizi (talimatlar için 5. Adım'a bakın) bekliyor.