การผสานรวม JavaScript Promise (JSPI) คือ API ที่ช่วยให้โค้ดแบบซิงโครนัส แบบลำดับที่คอมไพล์เป็น WebAssembly เข้าถึง Web API แบบอะซิงโครนัสได้ Web API หลายรายการสร้างขึ้นในรูปแบบของ Promise ของ JavaScript แทนที่จะดำเนินการที่ขอทันที แต่จะส่งคืน Promise เพื่อดำเนินการดังกล่าว เมื่อดำเนินการเสร็จสิ้นแล้ว Task Runner ของเบราว์เซอร์ จะเรียกใช้ Callback ใดก็ตามที่มี Promise JSPI จะเชื่อมต่อกับสถาปัตยกรรมนี้เพื่อ อนุญาตให้ระงับแอปพลิเคชัน WebAssembly เมื่อมีการส่งคืน Promise และอนุญาตให้กลับมาทำงานต่อเมื่อ Promise ได้รับการแก้ไข
ตั้งแต่ Chrome 123 จนถึง Chrome 128 JSPI จะพร้อมใช้งานเป็นช่วงทดลองใช้จากต้นทาง ดูข้อมูลเพิ่มเติมเกี่ยวกับ JSPI ได้ในบล็อกโพสต์ เปิดตัว API การผสานรวม Promise ของ JavaScript กับ WebAssembly หรือจาก ฉบับร่างของข้อกำหนด
หากต้องการทำความเข้าใจวิธีใช้ฟีเจอร์นี้ให้ดียิ่งขึ้น โปรดดู ตัวอย่างโปรแกรม C ต่อไปนี้ที่คำนวณลำดับฟีโบนัชชีโดยการส่งต่อ การบวกไปยังฟังก์ชัน 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);
});
หากต้องการคอมไพล์โปรแกรม C นี้เป็น WebAssembly ให้ใช้คำสั่งต่อไปนี้ ซึ่งต้องใช้ Emscripten SDK
emcc -O3 badfib.c -o index.html -s ASYNCIFY=2
คุณตรวจหาการรองรับ JSPI จาก JavaScript ได้ดังนี้
if ('Suspender' in WebAssembly) {
// JSPI is supported.
}
หากต้องการทดลองใช้ JSPI กับผู้ใช้จริงของแอปพลิเคชัน ลงชื่อสมัครใช้การทดลองใช้ต้นทาง โปรดอ่านเริ่มต้นใช้งาน Origin Trials หากต้องการดูวิธีการ ทีม JSPI หวังว่าจะได้รับความคิดเห็นเกี่ยวกับ Origin Trial จากคุณ (ดูขั้นตอนที่ 5 ใน วิธีการ) เพื่อให้ฟีเจอร์นี้ตอบโจทย์ความต้องการของคุณเมื่อเปิดตัว