گزارشهای فنی جدید از رفتار متد fetch در JavaScript نشون میدن که این تابع برعکس تصور خیلی از برنامهنویسها، وقتی resolve میشه اصلاً کل دیتا رو دانلود نکرده و فقط هدرها (headers) رو تحویل میده.
در واقع همون لحظه بدنه پاسخ یا همون body هنوز روی یک سوکت باز شبکه به شکل یک ReadableStream قطرهقطره در حال دریافته و این موضوع چند تا چالش جدی ایجاد میکنه.
برای مثال، فرض کنید یه ریکوئست میزنید و با استفاده از Promise.race براش یه تایماوت ۲۰۰ میلیثانیهای تعیین میکنید؛ اگر سرور هدرها رو تو ۵۰ میلیثانیه بفرسته اما دانلود دیتای اصلی دو ثانیه طول بکشه، تایماوت شما عملاً بیاثر میشه چون فاز لود هدر با موفقیت تموم شده و برنامه روی دانلود بادی روی هوا میمونه.
علاوه بر مشکل تایماوت، اگه تو محیطی مثل Node.js فقط status رو چک کنید و از پردازش بادی بگذرید، کانکشن TCP بسته نمیشه و استخر کانکشن های سرورتون رو بیدلیل اشغال میکنه.
پس به عنوان یک قاعده کلی برای جلوگیری از این باگهای پنهان، همیشه باید چرخه ریکوئست رو با خوندن کامل دیتا از طریق متدهایی مثل json یا text ببندید و برای مدیریت درست تایماوتها هم مستقیماً سراغ AbortSignal.timeout برید.
https://blog.gaborkoos.com/posts/2026-09-08-Half-Past-Fetch/
@codehalics | کدهالیک
Post #1109
1.22K
- ❤ 8
- 👍 3