मॉड्यूल पाठ (4/4)
अतुल्यकालिक कोड में त्रुटियाँ
एसिंक्रोनस ऑपरेशंस सिंक्रोनस ऑपरेशंस से अलग तरीके से विफल होते हैं: त्रुटि तुरंत नहीं आती है, यह "बाद में" आता है, जब वादा अस्वीकृत स्थिति में प्रवेश करता है। आइए दो मुख्य उपकरणों पर नजर डालें।
try/catch await के साथ
जब आप विफल होने वाले वादे से पहले await डालते हैं, तो त्रुटि रीथ्रो हो जाती है
सामान्य अपवाद: आप इसे try/catch से पकड़ते हैं।
async function safeRead() {
try {
const r = await fetch('/api/cose');
if (!r.ok) throw new Error('HTTP ' + r.status);
return await r.json();
} catch (err) {
console.error('network error:', err.message);
return null;
}
}यह सबसे पठनीय पैटर्न है: आप "खुशहाल पथ" को रैखिक रूप से लिखते हैं, और एक ही ब्लॉक में सब कुछ संभालते हैं।
.catch एक वादे पर
जंजीर शैली में:
fetch('/api/cose')
.then((r) => r.json())
.then((data) => console.log(data))
.catch((err) => console.error(err));.catch पूर्ववर्ती श्रृंखला में हुई किसी भी त्रुटि को पकड़ता है।
Promise.all पहली अस्वीकृति पर विफल रहता है
const ps = [Promise.resolve(1), Promise.reject(new Error('no')), Promise.resolve(3)];
try {
const r = await Promise.all(ps);
} catch (err) {
console.log(err.message); // 'no'
}अन्य वादे पृष्ठभूमि में चलते रहते हैं, लेकिन Promise.all पहली त्रुटि पर "सेटल" हो जाता है।
यदि आप उन सभी के परिणाम (विफलताओं सहित) चाहते हैं, तो Promise.allSettled का उपयोग करें:
const outcomes = await Promise.allSettled(ps);
// [{ status: 'fulfilled', value: 1 },
// { status: 'rejected', reason: Error('no') },
// { status: 'fulfilled', value: 3 }]इसे अजमाएं
`readOrFallback(p, फ़ॉलबैक)` async को परिभाषित करें: प्रॉमिस p का इंतजार करने का प्रयास करें; यदि इसे अस्वीकार कर दिया जाता है, तो फ़ॉलबैक लौटाएँ।
संकेत दिखाएँ
कोशिश करें {वापसी प्रतीक्षा करें पी; } पकड़ें { वापसी फ़ॉलबैक; }
3 प्रयासों के बाद समाधान उपलब्ध है
व्यायाम की समीक्षा करें
`allOrNothing(promises)` async को परिभाषित करें: Promise.all का उपयोग करें। यदि कम से कम एक विफल रहता है, तो खाली सरणी वापस करें []। अन्यथा मान लौटाएँ।
संकेत दिखाएँ
प्रयास करें {वापसी प्रतीक्षा करें Promise.all(वादे); } पकड़ें {वापसी []; }
3 प्रयासों के बाद समाधान उपलब्ध है