ماڈیول اسباق (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 کا انتظار کرنے کی کوشش کریں؛ اگر اسے مسترد کر دیا جائے تو فال بیک واپس کر دیں۔
اشارہ دکھائیں۔
کوشش کریں { واپسی کا انتظار کریں } کیچ { واپسی فال بیک؛ }
3 کوششوں کے بعد حل دستیاب ہے۔
ورزش کا جائزہ لیں۔
'allOrNothing(promises)' async کی وضاحت کریں: Promise.all کا استعمال کریں۔ اگر کم از کم ایک ناکام ہو جاتا ہے تو، خالی صف [] واپس کریں۔ بصورت دیگر اقدار واپس کریں۔
اشارہ دکھائیں۔
کوشش کریں { واپسی کا انتظار کریں Promise.all(promises); } پکڑنا {واپسی []؛ }
3 کوششوں کے بعد حل دستیاب ہے۔