JavaScript Promise Integration (JSPI) הוא API שמאפשר לקוד סנכרוני רציף שעבר קומפילציה ל-WebAssembly לגשת לממשקי API לא סנכרוניים באינטרנט. הרבה ממשקי API לאינטרנט מנוסחים במונחים של הבטחות ב-JavaScript: במקום לבצע מיד את הפעולה המבוקשת, הם מחזירים הבטחה לעשות זאת. כשהפעולה מתבצעת בסופו של דבר, מנהל המשימות של הדפדפן מפעיל קריאות חוזרות עם ההבטחה. JSPI מתחבר לארכיטקטורה הזו כדי לאפשר השעיה של אפליקציית WebAssembly כשההבטחה מוחזרת, וכדי לאפשר את המשך הפעולה שלה כשההבטחה מתקבלת.
מגרסה Chrome 123 עד גרסה Chrome 128, JSPI זמין כגרסת מקור לניסיון. מידע נוסף על JSPI זמין בפוסט בבלוג Introducing the WebAssembly JavaScript Promise Integration API או בטיוטת המפרט.
כדי להבין טוב יותר איך להשתמש בתכונה הזו, כדאי לעיין בקטע הבא מתוכנית 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 עם משתמשים אמיתיים באפליקציה, צריך להירשם לתקופת הניסיון של המקור. אם אתם צריכים הוראות, כדאי לקרוא את המאמר איך מתחילים להשתמש בתקופות ניסיון של מקורות. צוות JSPI מחכה לקבל מכם משוב על תקופת הניסיון של התכונה (ראו שלב 5 בהוראות), כדי שהתכונה תתאים לצרכים שלכם כשהיא תושק!