जावास्क्रिप्ट में प्रॉमिस क्लास
इस लेख में, हम जावास्क्रिप्ट में प्रॉमिस क्लास की व्याख्या करेंगे।
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()का उपयोग करके कईPromises को एक साथ संभाल सकते हैं। async/awaitPromises को अधिक सरलता से लिखने का सिंटैक्स है।
आप हमारे YouTube चैनल पर Visual Studio Code का उपयोग करके ऊपर दिए गए लेख के साथ आगे बढ़ सकते हैं। कृपया YouTube चैनल को भी देखें।