মডিউল পাঠ (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(প্রতিশ্রুতি)` async সংজ্ঞায়িত করুন: Promise.all ব্যবহার করুন। অন্তত একটি ব্যর্থ হলে, খালি অ্যারে [] ফেরত দিন। অন্যথায় মান ফেরত দিন।
ইঙ্গিত দেখান
চেষ্টা করুন { return await Promise.all(প্রতিশ্রুতি); } ধরা { রিটার্ন []; }
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ