মূল কন্টেন্টে যান
মডিউল 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(প্রতিশ্রুতি)` async সংজ্ঞায়িত করুন: Promise.all ব্যবহার করুন। অন্তত একটি ব্যর্থ হলে, খালি অ্যারে [] ফেরত দিন। অন্যথায় মান ফেরত দিন।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

চেষ্টা করুন { return await Promise.all(প্রতিশ্রুতি); } ধরা { রিটার্ন []; }

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ