مهمة برمجية: الحصول على البيانات بشكل متوازٍ مع معالجة الأخطاء والمهلات الزمنية
TypeScript
Hard
async
مهمة «مهمة برمجية: الحصول على البيانات بشكل متوازٍ مع معالجة الأخطاء والمهلات الزمنية»
```html
نفذ دالة غير متزامنة `fetchWithTimeout`، والتي تستقبل مصفوفة من عناوين URL (نصوص) ومهلة زمنية بالمللي ثانية. يجب على الدالة إرسال طلبات HTTP بشكل متوازٍ إلى جميع عناوين URL باستخدام `fetch`. إذا استغرق الطلب وقتًا أطول من المهلة الزمنية المحددة، فيجب إلغاؤه (عبر `AbortController`). تُرجع الدالة مصفوفة من النتائج بنفس ترتيب عناوين URL المدخلة. لكل عنوان URL، تكون النتيجة نصًا: إما استجابة ناجحة (نص الاستجابة) أو رسالة خطأ بالصيغة "Error: <نوع الخطأ>"، حيث <نوع الخطأ> هو "Timeout" إذا انتهت المهلة الزمنية، أو "Network" إذا حدث خطأ في الشبكة. من المضمون أن عناوين URL صالحة، لكن الخادم قد لا يستجيب أو قد يستغرق وقتًا طويلاً في الاستجابة. استخدم `Promise.allSettled` لمعالجة جميع النتائج.
```
نفذ دالة غير متزامنة `fetchWithTimeout`، والتي تستقبل مصفوفة من عناوين URL (نصوص) ومهلة زمنية بالمللي ثانية. يجب على الدالة إرسال طلبات HTTP بشكل متوازٍ إلى جميع عناوين URL باستخدام `fetch`. إذا استغرق الطلب وقتًا أطول من المهلة الزمنية المحددة، فيجب إلغاؤه (عبر `AbortController`). تُرجع الدالة مصفوفة من النتائج بنفس ترتيب عناوين URL المدخلة. لكل عنوان URL، تكون النتيجة نصًا: إما استجابة ناجحة (نص الاستجابة) أو رسالة خطأ بالصيغة "Error: <نوع الخطأ>"، حيث <نوع الخطأ> هو "Timeout" إذا انتهت المهلة الزمنية، أو "Network" إذا حدث خطأ في الشبكة. من المضمون أن عناوين URL صالحة، لكن الخادم قد لا يستجيب أو قد يستغرق وقتًا طويلاً في الاستجابة. استخدم `Promise.allSettled` لمعالجة جميع النتائج.
```
تنسيق الإدخال
السطر الأول هو الرقم N (عدد عناوين URL). بعد ذلك، N سطر، كل سطر يحتوي على عنوان URL. السطر الأخير هو الرقم T (المهلة الزمنية بالمللي ثانية).
تنسيق الإخراج
N أسطر، كل سطر يحتوي على نتيجة الاستعلام (نص الرد أو رسالة الخطأ).
main.ts