మాడ్యూల్ పాఠాలు (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, fallback)` asyncని నిర్వచించండి: ప్రామిస్ p కోసం వేచి ఉండటానికి ప్రయత్నించండి; అది తిరస్కరించబడితే, తిరిగి వెనక్కి వచ్చేయండి.
సూచనను చూపించు
ప్రయత్నించండి {తిరిగి వేచి ఉండండి p; } క్యాచ్ {రిటర్న్ ఫాల్బ్యాక్; }
3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది
వ్యాయామం సమీక్షించండి
'allOrNhing(వాగ్దానాలు)' సమకాలీకరణను నిర్వచించండి: Promise.allని ఉపయోగించండి. కనీసం ఒకటి విఫలమైతే, ఖాళీ శ్రేణిని తిరిగి ఇవ్వండి []. లేకపోతే విలువలను తిరిగి ఇవ్వండి.
సూచనను చూపించు
ప్రయత్నించండి {తిరిగి వేచి ఉండండి Promise.all(వాగ్దానాలు); } క్యాచ్ {తిరిగి []; }
3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది