जावास्क्रिप्ट में प्रॉमिस क्लास
इस लेख में, हम जावास्क्रिप्ट में प्रॉमिस क्लास की व्याख्या करेंगे।
YouTube Video
Promise
Promise
क्लास असिंक्रोनस ऑपरेशंस को संभालने के लिए उपयोग की जाती है। यह ऑपरेशन के सफल होने पर परिणाम को और विफल होने पर त्रुटि को संभालती है। पारंपरिक रूप से, जब किसी असिंक्रोनस ऑपरेशन के समाप्त होने का इंतजार करना होता था, तो कॉलबैक फंक्शन्स का उपयोग किया जाता था, लेकिन Promise
इसे स्पष्ट और अधिक शक्तिशाली बनाता है।
1const promise = new Promise((resolve, reject) => {
2 setTimeout(() => resolve("Done!"), 1000);
3});
4
5// Displays "Done!" after 1 second
6promise.then(result => console.log(result));
- यह कोड एक असिंक्रोनस प्रक्रिया का उदाहरण है जो एक सेकंड के बाद "Done!" दिखाता है।
- सबसे पहले,
new Promise
का उपयोग करके एक नयाPromise
ऑब्जेक्ट बनाया जाता है। आर्ग्युमेंट एक फ़ंक्शन है जो दो कॉलबैक लेता है: सफलता के लिएresolve
और असफलता के लिएreject
। setTimeout
का उपयोग एक सेकंड के बादresolve()
को कॉल करने के लिए किया जाता है।promise
ऑब्जेक्ट कीthen()
मेथड पूर्णता का इंतजार करती है और परिणाम दिखाती है।
- सबसे पहले,
मूल संरचना
Promise
एक ऑब्जेक्ट है जिसका परिणाम अंततः या तो सफलता या असफलता हो सकता है।
1const promise = new Promise((resolve, reject) => {
2 // Asynchronous operation
3 // Flag indicating whether the operation was successful
4 const success = true;
5
6 if (success) {
7 resolve('Operation successful!');
8 } else {
9 reject('An error occurred');
10 }
11});
- सफलता के मामले में,
resolve()
को कॉल किया जाता है। - असफलता के मामले में,
reject()
को कॉल किया जाता है।
Promise
ऑब्जेक्ट के तीन अवस्था होते हैं।
1promise
2 .then((result) => {
3 console.log(result);
4 })
5 .catch((error) => {
6 console.error(error);
7 })
- Pending
- असिंक्रोनस प्रक्रिया अभी पूरी नहीं हुई है।
- Fulfilled
- असिंक्रोनस प्रक्रिया सफल हुई, और परिणाम
resolve()
द्वारा लौटाया गया। परिणामthen()
मेथड का उपयोग करके प्राप्त होता है।
- असिंक्रोनस प्रक्रिया सफल हुई, और परिणाम
- Rejected
- असिंक्रोनस प्रक्रिया विफल हो गई, और एक त्रुटि
reject()
के द्वारा आई। त्रुटिcatch()
मेथड के द्वारा प्राप्त होती है।
- असिंक्रोनस प्रक्रिया विफल हो गई, और एक त्रुटि
then()
और catch()
मेथड्स
Promise
का उपयोग करके, आप निर्धारित कर सकते हैं कि असिंक्रोनस ऑपरेशन समाप्त होने पर क्या करना है। इसके लिए, आप then()
और catch()
मेथड्स का उपयोग करते हैं।
then()
1const promise = new Promise((resolve, reject) => {
2 resolve('Operation successful!');
3});
4
5promise.then((result) => {
6 console.log(result); // "Operation successful!"
7});
then()
मेथड एक फंक्शन निर्दिष्ट करता है जिसेPromise
के सफल होने पर कॉल किया जाएगा।
catch()
1const promise = new Promise((resolve, reject) => {
2 reject('An error occurred');
3});
4
5promise.catch((error) => {
6 console.error(error); // "An error occurred"
7});
catch()
मेथड एक फंक्शन निर्दिष्ट करता है जिसेPromise
के विफल होने पर कॉल किया जाएगा।
finally()
मेथड
1const promise = new Promise((resolve, reject) => {
2 resolve('Operation successful!');
3});
4
5promise
6 .then((result) => {
7 console.log(result);
8 })
9 .catch((error) => {
10 console.error(error);
11 })
12 .finally(() => {
13 console.log('The operation has completed');
14 });
finally()
मेथड कोड को निर्दिष्ट करता है जिसे अंत में चलाया जाएगा, चाहेPromise
सफल हुआ हो या असफल।
then()
चेन
then()
एक नया Promise
वापस करता है, इसलिए आप अगले then()
को चेन कर सकते हैं।
1const promise = new Promise((resolve, reject) => {
2 setTimeout(() => {
3 resolve(1);
4 }, 1000);
5});
6
7promise
8 .then(result => {
9 console.log(result); // 1
10 return result + 1;
11 })
12 .then(result => {
13 console.log(result); // 2
14 return result + 1;
15 })
16 .then(result => {
17 console.log(result); // 3
18 })
19 .catch(error => {
20 console.error(error.message); // Something went wrong
21 });
- इस कोड में, प्रारंभिक
resolve()
मान 1 पास करता है, और प्रत्येकthen
द्वारा लौटाया गया मान अगलेthen
को पास किया जाता है। catch()
का उपयोग करके, आप चेन में किसी भी त्रुटि को एक ही स्थान पर संभाल सकते हैं।
व्यावहारिक उदाहरण
उदाहरण के लिए, Promises
का अक्सर सर्वर से डेटा प्राप्त करने के लिए उपयोग किया जाता है। आइए fetch()
API का उपयोग करके एक उदाहरण देखें।
1fetch('https://codesparklab.com/json/example.json')
2 .then(response => {
3 if (!response.ok) {
4 throw new Error('Network error');
5 }
6 return response.json();
7 })
8 .then(data => {
9 console.log(data);
10 })
11 .catch(error => {
12 console.error('Error:', error);
13 });
- इस कोड में, चूंकि
fetch()
एकPromise
लौटाता है, इसलिए सर्वर से प्रतिक्रिया प्राप्त करने के बाद डेटा को प्रोसेस करने के लिएthen()
का उपयोग किया जाता है। त्रुटियों को संभालने के लिएcatch()
का उपयोग किया जाता है।
कई Promises को संभालना
Promise.all()
कई Promises
को एक साथ निष्पादित करने और तभी आगे बढ़ने के लिए जब सभी सफल हों, Promise.all()
का उपयोग करें।
1const promise1 = Promise.resolve(1);
2const promise2 = Promise.resolve(2);
3const promise3 = Promise.resolve(3);
4
5Promise.all([promise1, promise2, promise3])
6 .then((results) => {
7 console.log(results); // [1, 2, 3]
8 })
9 .catch((error) => {
10 console.error('Error :', error);
11 });
- केवल तभी
then()
को कॉल किया जाता है जब सभीPromises
सफल हो। अगर एक भी विफल हो, तोcatch()
को कॉल किया जाता है।
Promise.allSettled()
यदि आप एक साथ कई Promise
चलाना चाहते हैं और सफलता या विफलता की परवाह किए बिना सभी परिणाम प्राप्त करना चाहते हैं, तो Promise.allSettled()
का उपयोग करें।
1const promise1 = Promise.resolve(1);
2const promise2 = Promise.reject("Failed");
3const promise3 = Promise.resolve(3);
4
5Promise.allSettled([promise1, promise2, promise3])
6 .then((results) => {
7 results.forEach(result => console.log(result));
8 // [
9 // { status: 'fulfilled', value: 1 },
10 // { status: 'rejected', reason: 'Failed' },
11 // { status: 'fulfilled', value: 3 }
12 // ]
13 });
- सभी
Promise
के सेट होने (या तो पूर्ण या अस्वीकार किए जाने) के बादthen()
कॉल किया जाता है। प्रत्येक परिणाम में एकstatus
प्रॉपर्टी होती है ('fulfilled'
या'rejected'
)। यदि कुछ विफल भी हो जाएं, तो भी इसका अन्य कार्यों पर कोई प्रभाव नहीं पड़ता।
Promise.race()
Promise.race()
उस Promise
का परिणाम लौटाता है जो पहले पूरा हो जाता है, चाहे वह सफल हो या असफल।
1const promise1 = new Promise((resolve) => setTimeout(resolve, 100, 'First'));
2const promise2 = new Promise((resolve) => setTimeout(resolve, 500, 'Second'));
3
4Promise.race([promise1, promise2]).then((result) => {
5 console.log(result); // "First"
6});
- जैसा कि इस उदाहरण में है, पहले पूर्ण हुए
Promise
का परिणाम वापस किया जाता है।
async
/await
के साथ संबंध
async
/await
सिंटैक्स का उपयोग करने से Promises
को अधिक सहजता से लिखा जा सकता है। एक async
फ़ंक्शन हमेशा एक Promise
लौटाता है, और await
Promise
के हल होने का इंतजार करता है।
1async function fetchData() {
2 try {
3 const response = await fetch('https://codesparklab.com/json/example.json');
4 const data = await response.json();
5 console.log(data);
6 } catch (error) {
7 console.error('Error :', error);
8 }
9}
10
11fetchData();
इस तरह async
/await
का उपयोग करके, असिंक्रोनस संचालन को सिंक्रोनस कोड की तरह लिखा जा सकता है, जिससे इसे पढ़ना आसान हो जाता है।
सारांश
Promise
असिंक्रोनस संचालन की सफलता या विफलता को संभालने के लिए एक ऑब्जेक्ट है।- सफल संचालन को
then()
से और त्रुटियों कोcatch()
से संभालें। finally()
उस कोड को परिभाषित करता है जो अंत में निष्पादित होता है, चाहे सफलता हो या विफलता।- आप
Promise.all()
याPromise.race()
का उपयोग करके कईPromise
s को एक साथ संभाल सकते हैं। async
/await
Promise
s को अधिक सरलता से लिखने का सिंटैक्स है।
आप हमारे YouTube चैनल पर Visual Studio Code का उपयोग करके ऊपर दिए गए लेख के साथ आगे बढ़ सकते हैं। कृपया YouTube चैनल को भी देखें।