एसिंक्रोनस प्रोसेसिंग लागू करना
इस लेख में एसिंक्रोनस प्रोसेसिंग का परिचय और Office Scripts में एसिंक्रोनस प्रोसेसिंग लागू करने का तरीका सैंपल कोड के साथ समझाया गया है।
एसिंक्रोनस प्रोसेसिंग क्या है
Section titled “एसिंक्रोनस प्रोसेसिंग क्या है”जैसा कि नाम से ही पता चलता है, एसिंक्रोनस प्रोसेसिंग का मतलब ऐसी प्रोसेसिंग है जो सिंक्रोनस रूप से नहीं चलती।
इसे लागू करने का तरीका समझाने से पहले, नीचे दिया गया कोड देखें।
function fetch(input: RequestInfo, init?: RequestInit): Promise<Response>;यह fetch फ़ंक्शन की टाइप डेफ़िनिशन है, जो किसी बाहरी सेवा से डेटा प्राप्त करता है।
आप देख सकते हैं कि फ़ंक्शन की रिटर्न वैल्यू Promise में लिपटी (रैप की गई) है।
एसिंक्रोनस प्रोसेसिंग का नतीजा इसी Promise में रैप होता है। Promise एक ऐसा ऑब्जेक्ट है, जो “किसी ऐसी प्रोसेसिंग के भविष्य के नतीजे” को दर्शाता है, जो शायद अभी पूरी न हुई हो।
async function fetchGoogle() { const response = await fetch('https://www.google.com');
console.log('Google से डेटा प्राप्त हो गया');}
async function main(workbook: ExcelScript.Workbook) { fetchGoogle();
console.log('यह Google से डेटा प्राप्त करने के बाद की प्रोसेसिंग है');}ऊपर दिए गए सैंपल में एसिंक्रोनस फ़ंक्शन fetchGoogle को डिफ़ाइन करके main फ़ंक्शन से कॉल किया गया है।
फ़िलहाल fetchGoogle के इम्प्लीमेंटेशन को बस इतना समझना काफ़ी है कि यह “एक ऐसा फ़ंक्शन है, जो एसिंक्रोनस रूप से नतीजा लौटाता है (Promise लौटाता है)”। ध्यान देने वाली बात main फ़ंक्शन का व्यवहार है।
उम्मीद यह होगी कि fetchGoogle पूरा होने के बाद ही main फ़ंक्शन की आगे की प्रोसेसिंग चले, लेकिन असल नतीजा इस तरह होता है।
यह Google से डेटा प्राप्त करने के बाद की प्रोसेसिंग हैGoogle से डेटा प्राप्त हो गया(Office Scripts में, जिस एसिंक्रोनस प्रोसेसिंग का इंतज़ार नहीं किया गया हो, वह स्क्रिप्ट खत्म होने तक पूरी न हो पाए और दूसरी लाइन आउटपुट ही न हो, ऐसा भी हो सकता है।)
आप देख सकते हैं कि main फ़ंक्शन की आगे की प्रोसेसिंग पहले चल गई है।
इस तरह, अगर एसिंक्रोनस प्रोसेसिंग का इंतज़ार करने का निर्देश न दिया गया हो, तो एसिंक्रोनस प्रोसेसिंग पूरी होने का इंतज़ार किए बिना ही आगे की प्रोसेसिंग चल जाती है।
async function fetchGoogle() { const response = await fetch('https://www.google.com');
console.log('Google से डेटा प्राप्त हो गया');}async function main(workbook: ExcelScript.Workbook) { await fetchGoogle();
console.log('यह Google से डेटा प्राप्त करने के बाद की प्रोसेसिंग है');}यहाँ fetchGoogle(); से पहले await जोड़ा गया है।
अब उम्मीद के मुताबिक नतीजा मिलेगा।
Google से डेटा प्राप्त हो गयायह Google से डेटा प्राप्त करने के बाद की प्रोसेसिंग हैasync/await से एसिंक्रोनस प्रोसेसिंग
Section titled “async/await से एसिंक्रोनस प्रोसेसिंग”Office Scripts में एसिंक्रोनस प्रोसेसिंग लिखने का सबसे ज़्यादा सुझाया जाने वाला तरीका async/await का उपयोग करना है।
चलाए जाने वाले फ़ंक्शन के function से पहले async लगाकर, और एसिंक्रोनस रूप से नतीजा लौटाने वाले फ़ंक्शन से पहले await लगाकर, प्रोसेसिंग तब तक रुकी रहती है जब तक एसिंक्रोनस फ़ंक्शन का नतीजा न मिल जाए।
async function main(workbook: ExcelScript.Workbook) { /** Google की वेबसाइट से मिला रिस्पॉन्स */ const google = await fetch('https://www.google.com');
console.log('Google से डेटा प्राप्त हो गया');
/** Yahoo की वेबसाइट से मिला रिस्पॉन्स */ const yahoo = await fetch('https://www.yahoo.co.jp');
console.log('Yahoo से डेटा प्राप्त हो गया');}Promise से एसिंक्रोनस प्रोसेसिंग
Section titled “Promise से एसिंक्रोनस प्रोसेसिंग”जैसा कि पहले बताया गया, एसिंक्रोनस फ़ंक्शन का नतीजा Promise ऑब्जेक्ट में रैप होता है, इसलिए Promise ऑब्जेक्ट के then जैसे मेथड इस्तेमाल किए जा सकते हैं।
JavaScript के सिंटैक्स के हिसाब से, then इस्तेमाल करते समय async ज़रूरी नहीं है। लेकिन Office Scripts में बाहरी कॉल करते समय, main फ़ंक्शन के साथ async लगाना और स्क्रिप्ट खत्म होने से पहले प्रोसेसिंग पूरी हो जाए, इसके लिए then की पूरी चेन का await से इंतज़ार करना ज़रूरी है।
async function main(workbook: ExcelScript.Workbook) { await fetch('https://www.google.com') .then((google) => { console.log('Google से डेटा प्राप्त हो गया');
return fetch('https://www.yahoo.co.jp'); }) .then((yahoo) => { console.log('Yahoo से डेटा प्राप्त हो गया'); });}async/await पैटर्न से तुलना करने पर पता चलता है कि Promise.then की मेथड चेन वाला यह तरीका सामान्य सिंक्रोनस प्रोसेसिंग से लिखने में काफ़ी अलग है, इसलिए इससे कोड पढ़ना मुश्किल हो सकता है।
जब तक कोई मजबूरी न हो, async/await का उपयोग करने की सलाह दी जाती है।