← بازگشت به تالار
هنرجو حل‌شده

مدیریت خطا در async/await جاوااسکریپت را کجا انجام دهیم؟

نازنین رضایی 1405/05/14 09:40 💬 2 پاسخ ◉ 221 بازدید
وقتی چند درخواست API را با async/await اجرا می‌کنم، نمی‌دانم try/catch باید داخل هر تابع باشد یا فقط در لایه‌ای که تابع را صدا می‌زند. برای Promise.all هم اگر یک درخواست Fail شود بهترین الگو چیست؟

پاسخ‌ها

2 پاسخ ثبت‌شده
مهندس امیررضا مرادی مدرس ✓ پاسخ پذیرفته‌شده
قاعده خوب این است که خطا را در لایه‌ای Catch کنید که می‌تواند درباره آن تصمیم بگیرد. تابع سطح پایین می‌تواند خطا را با Context مناسب دوباره Throw کند و لایه UI پیام قابل‌فهم نشان دهد. خطا را فقط Log نکنید و بدون Throw ادامه ندهید. برای چند درخواست مستقل: try { const results = await Promise.all(requests); } catch (error) { // یک Failure باعث Reject شدن Promise.all می‌شود } اگر نتیجه تمام درخواست‌ها، حتی موارد Fail شده، لازم است از Promise.allSettled استفاده کنید و status هر Result را بررسی کنید. همچنین fetch برای HTTP 404 یا 500 خودکار Reject نمی‌شود؛ response.ok را کنترل کنید و در صورت نیاز Error بسازید.
▲ 21 ▼ 1
نازنین رضایی هنرجو
نکته response.ok دلیل مشکلم بود؛ چون درخواست 404 وارد catch نمی‌شد. با بررسی status حل شد.
▲ 6 ▼ 0