தொகுதி பாடங்கள் (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 ஐ வரையறுக்கவும்: Promise pக்காக காத்திருக்க முயற்சிக்கவும்; அது நிராகரிக்கப்பட்டால், பின்னடைவைத் திருப்பித் தரவும்.
குறிப்பைக் காட்டு
முயற்சி {திரும்ப காத்திருக்கும் ப; } கேட்ச் {திரும்ப வீழ்ச்சி; }
3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்
மதிப்பாய்வு பயிற்சி
`allOrNothing(promises)` ஒத்திசைவை வரையறுக்கவும்: Promise.all ஐப் பயன்படுத்தவும். குறைந்தபட்சம் ஒன்று தோல்வியுற்றால், வெற்று வரிசையை [] திருப்பி அனுப்பவும். இல்லையெனில் மதிப்புகளைத் திருப்பி விடுங்கள்.
குறிப்பைக் காட்டு
முயற்சி { return waiit Promise.all(promises); } பிடிக்கவும் {திரும்பவும் []; }
3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்