जावास्क्रिप्ट में सिंक्रोनस शैली में प्रोमिसेज
प्रोमिस हेल की समस्या के समाधान के लिए एक विशेष सिंटैक्स का आविष्कार किया गया था, जो असिंक्रोनस कोड को बहुत आसानी से लिखने की अनुमति देता है - सिंक्रोनस शैली में।
आइए इसका अध्ययन शुरू करें। शुरुआत के लिए पिछले पाठ से कोड लेते हैं:
function func() {
getSmth(2).then(res => {
console.log(res); // 4 प्रिंट करेगा
});
}
func();
यदि हमारा फ़ंक्शन getSmth
सिंक्रोनस होता, तो फ़ंक्शन func का कोड
हम निम्नलिखित तरीके से फिर से लिख सकते थे:
function func() {
let res = getSmth(2);
console.log(res); // 4 प्रिंट करेगा
}
फ़ंक्शन getSmth, हालांकि, असिंक्रोनस है,
इसलिए ऊपर दिया गया कोड काम नहीं करेगा।
लेकिन, प्रोमिसेज की सिंक्रोनस शैली का उपयोग करके,
हम कुछ ऐसा ही प्राप्त करने में सक्षम होंगे।
आइए इसे करें।
शुरुआत में हमें अपने फ़ंक्शन
func को विशेष कमांड async का उपयोग करके
असिंक्रोनस घोषित करना होगा:
async function func() {
}
इसके बाद हम फ़ंक्शन func के अंदर
विशेष कमांड await का उपयोग करने में सक्षम होंगे।
यह कमांड, एक प्रोमिस से पहले लिखी गई, जावास्क्रिप्ट को
तब तक प्रतीक्षा करने के लिए मजबूर करेगी
जब तक कि प्रोमिस
पूरा नहीं हो जाता। इसके बाद कमांड
प्रोमिस का परिणाम लौटाएगी,
और कोड का निष्पादन जारी रहेगा।
हमारे मामले में, हमें await
getSmth के कॉल से पहले लिखना होगा। चूंकि इस फ़ंक्शन
के कॉल का परिणाम एक प्रोमिस होगा, इसलिए कोड का आगे का
निष्पादन केवल
इस प्रोमिस के पूरा होने के बाद ही जारी रहेगा।
खैर, प्रोमिस
के परिणाम को एक वेरिएबल में लिखा जा सकता है। आइए
वर्णित कार्य करें:
async function func() {
let res = await getSmth(2);
console.log(res); // 4 प्रिंट करेगा
}
func();
आइए getSmth को कई बार कॉल करें:
async function func() {
let res1 = await getSmth(2);
let res2 = await getSmth(3);
console.log(res1 + res2); // 13 प्रिंट करेगा
}
func();
और अब getSmth को एक लूप में कॉल करेंगे:
async function func() {
let arr = [1, 2, 3, 4, 5];
let sum = 0;
for (let elem of arr) {
sum += await getSmth(elem);
}
console.log(sum);
}
func();
निम्नलिखित कोड को सिंक्रोनस सिंटैक्स के माध्यम से फिर से लिखें:
function func() {
getSmth(2).then(res1 => {
getSmth(3).then(res2 => {
getSmth(4).then(res3 => {
console.log(res1 + res2 + res3);
});
});
});
}
func();