اذهب إلى المحتوى

Recommended Posts

  • 0
نشر

أرجو منك التعليق أسفل فيديو الدورة الخاص بالسؤال حيث ستجد قسم خاص بالتعليقات، وطرح الأسئلة العامة هنا في قسم أسئلة البرمجة.

والكود الذي وضحته وهو التالي لا يوجد به مشكلة حيث سيتم طباعة hello بعد فترة 3 ثواني:

const wait = time => new Promise(
    (resolve, reject) => setTimeout(resolve, time)
)

wait(3000).then(() => console.log('hello'))

فما هو الخطأ الذي يظهر لك في الكونسول؟

وإليك تفسير الكود:

نستخدم الوظيفة wait لإنشاء وعد (Promise) يتأخر لفترة محددة من الوقت المحدد كمعامل (time)، ثم حل الوعد (resolve) بعد انتهاء الفترة المحددة وهي لمدة 3000 ميلي ثانية (3 ثوانٍ)، ثم يتم طباعة "hello" عندما يتم حل الوعد.

  • 0
نشر

سبب المشكلة هو أنك كتبت دالة setTimeout بشكل غير صحيح، ففي جافاسكريبت يتم إعتماد طريقة camel Case في الأسماء أي أن كل كلمة بعد الأولى تبدأ بحرف كبير، لاحظ أنك كتبت settimeout بينما الصحيح هو setTimeout لاحظ حرف t كبير وليس صغير.

  • 0
نشر

يوجد خطأ في النحو (syntax error) في الكود المذكور، حيث يتم كتابة "settimeout" بدلاً من "setTimeout" بحرف كبير في الحرف S

const wait = time => new Promise(
  (resolve, reject) => setTimeout(resolve, time)
);
wait(3000).then(() => console.log('hello'));

الكود المذكور بالفعل بسيط ويقوم بالغرض المطلوب، ولكن يمكن تحسينه بإضافة التعامل مع حالة الخطأ (error handling) في حالة فشل الوعد (promise)، وكذلك إضافة قيمة افتراضية للوقت الممرر إلى الدالة في حالة عدم تمرير أي قيمة. يمكن تحسين الكود على النحو التالي:

const wait = (time = 0) =>
  new Promise((resolve, reject) => {
    if (typeof time !== 'number') {
      reject(new Error('Invalid time'));
    }
    setTimeout(resolve, time);
  });

wait(3000)
  .then(() => console.log('Hello'))
  .catch(error => console.error(error.message));

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...