JavaScript Promise Integration (JSPI), WebAssembly'e derlenen sıralı senkronize 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 taahhüt döndürüldüğünde askıya alınmasına ve taahhüt çözümlendiğinde devam ettirilmesine olanak tanımak için bu mimariye bağlanır.
Chrome 123 ile Chrome 128 arasında JSPI, kaynak denemesi olarak kullanılabilir. JSPI hakkında daha fazla bilgiyi WebAssembly JavaScript Promise Integration API'yi tanıtıyoruz başlıklı blog yayınında veya özet taslakta bulabilirsiniz.
Bu özelliğin nasıl kullanılacağını daha iyi anlamak için, dışarıdan bir JavaScript işlevi ekleyerek Fibonacci dizisini hesaplayan bir C programıyla ilgili aşağıdaki alıntıyı göz önünde bulundurun.
// 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 bulabilirsiniz ve aşağıdaki dosyaya da ekleyebilirsiniz. İ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.