JavaScript Promise Integration (JSPI) एक ऐसा एपीआई है जो WebAssembly में कंपाइल किए गए सिंक्रोनस सीक्वेंशियल कोड को, एसिंक्रोनस वेब एपीआई ऐक्सेस करने की अनुमति देता है. कई वेब एपीआई, JavaScript प्रॉमिस के तौर पर बनाए जाते हैं: अनुरोध की गई कार्रवाई को तुरंत पूरा करने के बजाय, वे ऐसा करने का प्रॉमिस करते हैं. जब कार्रवाई पूरी हो जाती है, तो ब्राउज़र का टास्क रनर, प्रॉमिस के साथ किसी भी कॉलबैक को लागू करता है. JSPI इस आर्किटेक्चर में हुक करता है, ताकि प्रॉमिस के वापस आने पर WebAssembly ऐप्लिकेशन को निलंबित किया जा सके. साथ ही, प्रॉमिस के हल होने पर उसे फिर से शुरू किया जा सके.
Chrome 123 से लेकर Chrome 128 तक, JSPI, ऑरिजिन ट्रायल के तौर पर उपलब्ध है. ब्लॉग पोस्ट Introducing the WebAssembly JavaScript Promise Integration API में JSPI के बारे में ज़्यादा जानें. इसके अलावा, स्पेसिफ़िकेशन के ड्राफ़्ट से भी इसके बारे में जानकारी पाई जा सकती है.
इस सुविधा को इस्तेमाल करने के तरीके के बारे में बेहतर तरीके से समझने के लिए, 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
JavaScript से JSPI की सुविधा का पता इस तरह लगाया जा सकता है:
if ('Suspender' in WebAssembly) {
// JSPI is supported.
}
अपने ऐप्लिकेशन के असली उपयोगकर्ताओं के साथ JSPI को आज़माने के लिए, ऑरिजिन ट्रायल के लिए साइन अप करें. अगर आपको निर्देशों की ज़रूरत है, तो ओरिजिन ट्रायल का इस्तेमाल शुरू करना लेख पढ़ें. JSPI टीम को आपके ओरिजिन ट्रायल के फ़ीडबैक का इंतज़ार रहेगा. इसके लिए, निर्देशों में दिया गया पांचवां चरण देखें. इससे यह सुविधा, रिलीज़ होने पर आपकी ज़रूरतों के हिसाब से काम करेगी!