ప్రధాన కంటెంట్‌కు వెళ్లండి
మాడ్యూల్ 7 · 4లో పాఠం 4కోర్సులో 28/32~12 min
మాడ్యూల్ పాఠాలు (4/4)

అసమకాలిక కోడ్‌లో లోపాలు

అసమకాలిక కార్యకలాపాలు సింక్రోనస్ వాటి నుండి భిన్నంగా విఫలమవుతాయి: లోపం వెంటనే రాదు, ప్రామిస్ తిరస్కరించబడిన స్థితిలోకి ప్రవేశించినప్పుడు అది "తర్వాత" వస్తుంది. రెండు ప్రధాన సాధనాలను చూద్దాం.

try/catchతో await

మీరు awaitని విఫలమైన వాగ్దానానికి ముందు ఉంచినప్పుడు, లోపం తిరిగి వేయబడుతుంది సాధారణ మినహాయింపు: మీరు దీన్ని try/catchతో పట్టుకున్నారు.

JS
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 వాగ్దానంపై

బంధించిన శైలిలో:

JS
fetch('/api/cose')
  .then((r) => r.json())
  .then((data) => console.log(data))
  .catch((err) => console.error(err));

.catch మునుపటి గొలుసులో విసిరిన ఏదైనా లోపాన్ని క్యాచ్ చేస్తుంది.

Promise.all మొదటి తిరస్కరణలో విఫలమైంది

JS
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ని ఉపయోగించండి:

JS
const outcomes = await Promise.allSettled(ps);
// [{ status: 'fulfilled', value: 1 },
//  { status: 'rejected', reason: Error('no') },
//  { status: 'fulfilled', value: 3 }]

దీనిని ప్రయత్నించండి

వ్యాయామం#js.m7.l4.e1
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

`readOrFallback(p, fallback)` asyncని నిర్వచించండి: ప్రామిస్ p కోసం వేచి ఉండటానికి ప్రయత్నించండి; అది తిరస్కరించబడితే, తిరిగి వెనక్కి వచ్చేయండి.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

ప్రయత్నించండి {తిరిగి వేచి ఉండండి p; } క్యాచ్ {రిటర్న్ ఫాల్‌బ్యాక్; }

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది

వ్యాయామం సమీక్షించండి

వ్యాయామం#js.m7.l4.e2
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

'allOrNhing(వాగ్దానాలు)' సమకాలీకరణను నిర్వచించండి: Promise.allని ఉపయోగించండి. కనీసం ఒకటి విఫలమైతే, ఖాళీ శ్రేణిని తిరిగి ఇవ్వండి []. లేకపోతే విలువలను తిరిగి ఇవ్వండి.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

ప్రయత్నించండి {తిరిగి వేచి ఉండండి Promise.all(వాగ్దానాలు); } క్యాచ్ {తిరిగి []; }

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది