अतुल्यकालिक संक्रियाएँ आधुनिक जावास्क्रिप्ट अनुप्रयोगों की रीढ़ हैं, खासकर जब I/O-बाध्य कार्यों जैसे नेटवर्क अनुरोध या फ़ाइल संक्रियाओं से निपटते हैं। प्रॉमिस इन अतुल्यकालिक क्रियाओं के अंतिम परिणामों को प्रबंधित करने का एक संरचित और सुंदर तरीका प्रदान करते हैं। यह मार्गदर्शिका प्रॉमिस के यांत्रिकी, उनके जीवनचक्र और शक्तिशाली async/await
सिंटैक्स का उपयोग करके उन्हें संभालने के सर्वोत्तम अभ्यासों में तल्लीन करती है।
विषयवस्तु की तालिका
- जावास्क्रिप्ट में प्रॉमिस क्या हैं?
- प्रॉमिस जीवनचक्र: अवस्थाएँ और संक्रमण
- प्रॉमिस हैंडलिंग के लिए Async/Await में महारत
- प्रॉमिस के साथ मज़बूत त्रुटि हैंडलिंग
- क्रमिक संक्रियाओं के लिए प्रॉमिस को जोड़ना
- एक साथ कई प्रॉमिस को संभालना
जावास्क्रिप्ट में प्रॉमिस क्या हैं?
एक प्रॉमिस एक वस्तु है जो किसी अतुल्यकालिक संक्रिया के अंतिम पूर्ण होने (या विफलता) का प्रतिनिधित्व करती है। तुल्यकालिक कार्यों के विपरीत जो तुरंत मान लौटाते हैं, एक अतुल्यकालिक फलन एक प्रॉमिस लौटाता है, जो भविष्य के मान के लिए एक प्लेसहोल्डर के रूप में कार्य करता है। यह मान अतुल्यकालिक संक्रिया के समाप्त होने पर उपलब्ध होगा।
प्रॉमिस पारंपरिक कॉलबैक के लिए एक स्वच्छ विकल्प प्रदान करते हैं, कोड की पठनीयता और रखरखाव में महत्वपूर्ण रूप से वृद्धि करते हैं, खासकर जब कई नेस्टेड अतुल्यकालिक संक्रियाओं से निपटते हैं (“कॉलबैक नर्क” से बचते हुए)।
प्रॉमिस जीवनचक्र: अवस्थाएँ और संक्रमण
एक प्रॉमिस तीन अवस्थाओं में से किसी एक में मौजूद हो सकता है:
- प्रतीक्षारत (Pending): प्रारंभिक अवस्था। अतुल्यकालिक संक्रिया अभी भी प्रगति पर है।
- पूर्ण (Fulfilled (Resolved)): संक्रिया सफलतापूर्वक पूरी हो गई, और प्रॉमिस में अब एक परिणाम मान है।
- अस्वीकृत (Rejected): संक्रिया विफल हो गई, और प्रॉमिस में विफलता का कारण है (आमतौर पर एक त्रुटि वस्तु)।
इन अवस्थाओं के बीच संक्रमण एकदिश हैं: प्रतीक्षारत या तो पूर्ण या अस्वीकृत में संक्रमित हो सकता है, लेकिन एक बार प्रॉमिस पूर्ण या अस्वीकृत हो जाने पर, यह अवस्था नहीं बदल सकता है।
प्रॉमिस हैंडलिंग के लिए Async/Await में महारत
async/await
कीवर्ड प्रॉमिस के साथ काम करने के लिए एक अधिक तुल्यकालिक शैली प्रदान करते हैं, कोड की पठनीयता में वृद्धि करते हैं और अतुल्यकालिक कोड को समझना आसान बनाते हैं। async
एक फलन को अतुल्यकालिक घोषित करता है, जिससे इसमें await
का उपयोग करने की अनुमति मिलती है। await
निष्पादन को तब तक रोक देता है जब तक कि एक प्रॉमिस हल (या अस्वीकृत) नहीं हो जाता।
प्रॉमिस के साथ मज़बूत त्रुटि हैंडलिंग
अतुल्यकालिक संक्रियाओं के साथ काम करते समय प्रभावी त्रुटि हैंडलिंग महत्वपूर्ण है। .catch()
विधि का उपयोग अस्वीकृत प्रॉमिस को संभालने के लिए किया जाता है। व्यापक त्रुटि प्रबंधन के लिए try...catch
कथनों में async/await
ब्लॉक को लपेटना सबसे अच्छा अभ्यास है।
async function fetchData() {
try {
const response = await fetch('some-url');
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json();
return data;
} catch (error) {
console.error('Error fetching data:', error);
// त्रुटि को उचित रूप से संभालें, उदाहरण के लिए, एक त्रुटि संदेश प्रदर्शित करें, अनुरोध को पुनः प्रयास करें, आदि।
throw error; // ऊपरी स्तरों को त्रुटि को संभालने की अनुमति देने के लिए पुनः थ्रो करें
}
}
क्रमिक संक्रियाओं के लिए प्रॉमिस को जोड़ना
जब कई अतुल्यकालिक संक्रियाएँ एक-दूसरे पर निर्भर करती हैं, तो आप .then()
का उपयोग करके प्रॉमिस को जोड़ सकते हैं। एक प्रॉमिस का परिणाम अगले में इनपुट के रूप में दिया जाता है।
fetchData()
.then(data => processData(data))
.then(result => displayResult(result))
.catch(error => handleError(error));
एक साथ कई प्रॉमिस को संभालना
स्वतंत्र अतुल्यकालिक संक्रियाओं के लिए, आप उन्हें Promise.all()
का उपयोग करके समानांतर में चला सकते हैं। यह फलन प्रॉमिस की एक सरणी लेता है और तब हल करता है जब सरणी में सभी प्रॉमिस हल हो गए हों। यह हल किए गए मानों की एक सरणी लौटाता है।
async function fetchDataFromMultipleSources() {
const promises = [
fetch('url1').then(response => response.json()),
fetch('url2').then(response => response.json()),
fetch('url3').then(response => response.json())
];
try {
const results = await Promise.all(promises);
console.log('Data from all sources:', results);
} catch (error) {
console.error('Error fetching data from one or more sources:', error);
}
}