مرکزی مواد پر جائیں
ماڈیول 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 کا انتظار کرنے کی کوشش کریں؛ اگر اسے مسترد کر دیا جائے تو فال بیک واپس کر دیں۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

کوشش کریں { واپسی کا انتظار کریں } کیچ { واپسی فال بیک؛ }

3 کوششوں کے بعد حل دستیاب ہے۔

ورزش کا جائزہ لیں۔

ورزش#js.m7.l4.e2
کوششیں: 0لوڈ ہو رہا ہے…

'allOrNothing(promises)' async کی وضاحت کریں: Promise.all کا استعمال کریں۔ اگر کم از کم ایک ناکام ہو جاتا ہے تو، خالی صف [] واپس کریں۔ بصورت دیگر اقدار واپس کریں۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

کوشش کریں { واپسی کا انتظار کریں Promise.all(promises); } پکڑنا {واپسی []؛ }

3 کوششوں کے بعد حل دستیاب ہے۔