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

السؤال

نشر

في اشهر لغات البرمجة مثل Python و PHP وغيرها يوجد دالة sleep لإيقاف الكود بشكل مؤقت لعدد معين من الثواني.

كيف أقوم بتطبيق نفس الفكرة في جافاسكريبت،  حيث أريد أن يتم طباعة جملة معينة ثم الإنتظار لعدد معين من الثواني ثم طباعة جملة أخرى بعد ذلك:

console.log('first');

// sleep(3000;	// إيقاف الكود هنا لثلاث ثواني 

console.log('second');

 

Recommended Posts

  • 0
نشر (معدل)

إذا كنت تتطلع إلى منع تنفيذ التعليمات البرمجية من خلال استدعاء sleep ، فعندئذٍ لا ، لا توجد طريقة لذلك في JavaScript. جافا سكريبت لديها طريقة setTimeout. سيتيح لك setTimeout إرجاء تنفيذ وظيفة لمدة x millieseconds. مثلا طباعة first ثم الانتظار لمدة 3 ثواني لتنفيذ وظيفة طباعة second نقوم بالأمر :

    //  millieseconds إرجاء تنفيذ وظيفة لمدة 3 
     
setTimeout(function(){ 

    console.log('second'); 
}, 3000);  // 3 seconds طباعة بعد

console.log('first');

عند التنفيذ نحصل على النتيجة التالية:

first
second

اطلع على وظيفة setTimeout من هنا

تم التعديل في بواسطة Ayoub Souad
  • 1
نشر

من خلال ماتقدّمه الجافاسكريبت من تقنيات async await أو Promise يمكن تنفيذ ذلك بأمر بسيط:

على هئية تابع لاستخدامه بمناطق مختلفة ضمن الشيفرة البرمجية:

function sleep(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}

أو

const sleep = ms => new Promise(r => setTimeout(r, ms));

أو بسطر واحد فقط يمكن اختصاره كالتالي:

await new Promise(r => setTimeout(r, 2000));

 

  • 0
نشر

هل جربت انشاء دالة مخصصة لذلك؟ لنسميها sleep ايضا!

تقوم هاته الدالة بجلب الوقت time الذي تم فيه استدعاءها ثم تنفيذ حلقة while مقيدة بشرط ان يكون وقت تنفيذ التكرارة الواحدة من الحلقة اقل من الوقت الذي تم فيه استدعاء الدالة مضافا اليه الوقت الذي نريد تمريره الى الدالة sleep. 

تطبيق عملي لها:

function sleep(duration){
    // جلب الوقت time الذي تم فيه استدعاءها
    var now = new Date().getTime();
  
    // تنفيذ حلقة while مقيدة بشرط ان يكون وقت تنفيذ التكرارة الواحدة من الحلقة اقل من الوقت الذي تم فيه استدعاء الدالة مضافا اليه الوقت الذي نريد تمريره الى الدالة sleep
    while(new Date().getTime() < now + duration){ 
        /* لا شيء */ 
    }
}

function exampleFunc(){
    sleep(2000);
                                    
    console.log("Hello");
}

exampleFunc()

لاحظ ان القيمة المسندة لـ now يتم تنفيذها مرة واحدة. وبالتالي فهي تخزن مرة واحدة في التخزين المحلي. في حين ان تلك التي استعمالها في شرط الحلقة while يتم تحديثها كل حلقة من التكرار الى حد انتفاء الشرط.

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...