معمل
محاكي محرك JavaScript
20 دقيقة
متوسط3 المحاولات المجانية
التعليمات
الهدف
نفّذ ثلاث دوال تختبر إتقانك لأنماط JavaScript غير المتزامنة — المهارات ذاتها التي تقيّمها مقابلات الواجهات الأمامية.
المهمة 1: توقع إخراج حلقة الأحداث
اكتب دالة predictOutput() تُرجع مصفوفة من السلاسل النصية بالترتيب الدقيق الذي ستُسجل به:
function predictOutput() {
// أرجع ترتيب console.logs لهذا الكود:
//
// console.log('A');
// setTimeout(() => console.log('B'), 0);
// Promise.resolve()
// .then(() => console.log('C'))
// .then(() => console.log('D'));
// queueMicrotask(() => console.log('E'));
// console.log('F');
return ['A', '?', '?', '?', '?', '?']; // استبدل بالترتيب الصحيح
}
المهمة 2: تنفيذ Promise.all
اكتب دالة promiseAll(promises) تعمل بشكل مطابق لـ Promise.all:
- تُحل بمصفوفة نتائج عندما تُنجز جميع الوعود
- النتائج يجب أن تحافظ على نفس ترتيب وعود الإدخال
- ترفض فورًا عندما يرفض أي وعد
- تتعامل مع القيم غير الـ Promise (تلفها بـ Promise.resolve)
- تتعامل مع إدخال مصفوفة فارغة (تُحل بـ [])
function promiseAll(promises) {
// تنفيذك هنا
}
المهمة 3: إعادة المحاولة مع التراجع الأسي
اكتب دالة retryWithBackoff(fn, maxRetries, baseDelay):
- تستدعي
fn()وتُرجع نتيجتها إذا نجحت - عند الفشل، تنتظر
baseDelay * 2^attemptمللي ثانية قبل إعادة المحاولة - بعد
maxRetriesمحاولات فاشلة، ترمي الخطأ الأخير - يجب أن تعمل مع الدوال المتزامنة وغير المتزامنة
async function retryWithBackoff(fn, maxRetries = 3, baseDelay = 1000) {
// تنفيذك هنا
}
المتطلبات
- يجب تنفيذ الدوال الثلاث جميعها
- الكود يجب أن يكون JavaScript صالح (ES2022+)
- لا يُسمح بمكتبات خارجية
- أضف تعليقات موجزة تشرح منطقك للمهمة 1
معايير التقييم
المهمة 1: يتوقع بشكل صحيح ترتيب إخراج حلقة الأحداث (A, F, C, E, D, B) مع تفسير دقيق حول طوابير المهام الصغيرة مقابل الكبيرة25 نقاط
المهمة 2: ينفذ Promise.all بشكل صحيح مع الحفاظ على الترتيب والرفض الفوري ومعالجة غير الـ Promise وحالة المصفوفة الفارغة35 نقاط
المهمة 3: ينفذ إعادة المحاولة مع توقيت تراجع أسي صحيح (baseDelay * 2^attempt)، ونشر خطأ صحيح بعد أقصى محاولات، ويعمل مع الدوال المتزامنة وغير المتزامنة30 نقاط
جودة الكود: كود نظيف وقابل للقراءة مع تعليقات مناسبة تشرح منطق حلقة الأحداث10 نقاط
حلك
يمكنك استخدام أي لغة برمجة
3 محاولات مجانية متبقية