على عكس لغات البرمجة الأخرى ، لا تحتوي JavaScript على طريقة سكون مضمنة. لذلك لا يمكنك ببساطة استدعاء وظيفة sleep () لإيقاف برنامج Node.js مؤقتًا. ومع ذلك ، هناك طرق أخرى يمكنك من خلالها جعل البرنامج ينتظر وقتًا محددًا.

يناقش هذا البرنامج التعليمي ثلاث طرق: setTimeout ، غير المتزامن / انتظار ، وحزمة وعد النوم.

استخدام setTimeout () لانتظار وقت محدد

ال setTimeout () تعمل وظيفة جداول التعليمات البرمجية لوقت التشغيل للتنفيذ بمجرد مرور فترة زمنية محددة. يقبل دالة ووقت تأخير بالمللي ثانية. ها هي البنية:

setTimeout (وظيفة(), الوقت)

على سبيل المثال ، لنفترض أن لديك وظيفة تطبع على وحدة التحكم:

وظيفةprintSentence() {
console.log ("باستخدام setTimeout ()")
}

لتشغيل الوظيفة المذكورة أعلاه بعد انقضاء ثانيتين ، قم بتمرير الوظيفة ووقت التأخير البالغ 2000 مللي ثانية إلى ملف setTimeout () وظيفة:

setTimeout (printSentence ، 2000)

بينما يعمل هذا ، فإنه ليس مضمونًا أن وظيفتك ستعمل بالضبط بعد ثانيتين. بالتأكيد سيستغرق هذا القدر من الوقت على الأقل ، ولكنه قد يستغرق المزيد.

هل setTimeout () دقيقة؟

نعم ، ولكن مع بعض المحاذير.

instagram viewer
setTimeout () هو وظيفة JavaScript غير متزامنة مما يعني أنه غير محظور. تتم إضافة الكود الذي تقوم بجدولته إلى حلقة الحدث بينما يستمر باقي البرنامج.

بعد مرور وقت التأخير ، سيقوم برنامجك بتنفيذ الكود المجدول ، ولكن فقط عندما يكون ذلك مجانيًا. إذا كان هناك رمز آخر في مكدس الاستدعاءات ، فسيتم تنفيذه أولاً ، حتى إذا كان من المقرر تشغيل الكود المجدول. هذا هو المكان الذي يمكن أن يحدث فيه تأخير إضافي ، وبالتالي عدم الدقة.

ضع في اعتبارك البرنامج التالي.

console.log ("مرحبا بالعالم!")

وظيفةprintSentence() {
console.log ("باستخدام setTimeout ()")
}

setTimeout (printSentence ، 2000)
console.log ("منتهي")

إليك ما ستعرضه وحدة التحكم عند تشغيلها:

مرحبا بالعالم!
منتهي
باستخدام setTimeout ()

يُدخل هذا البرنامج تأخيرًا ، لكنه يؤخر فقط الكود الذي يمرر إليه setTimeout (). يستمر باقي البرنامج ، مع قيام الكود المجدول بمقاطعته بمجرد انقضاء المدة. إذا كنت تريد تشغيل كل هذه التعليمات البرمجية بالترتيب ، مع توقف مؤقت في المنتصف ، باستخدام setTimeout () لن يعمل.

أحد البدائل هو كتابة رمز متزامن يحظر التنفيذ طالما كنت بحاجة. على سبيل المثال ، يمكنك استخدام ملف افعل اثناء حلقة لمنع تنفيذ الموضوع حتى ينتهي وقت التأخير:

وظيفةتأخير(تصلب متعدد) {
مقدار ثابت التاريخ = تاريخ.الآن()؛
يترك CurrentDate = باطل;

فعل {
CurrentDate = تاريخ.الآن()؛
} في حين (التاريخ الحالي - التاريخ }

console.log ("مرحبا بالعالم");
تأخير (2000) ؛
console.log ("ستتم طباعتها بعد ثانيتين!");

ال تأخير() حلقات دالة حتى يصبح الوقت الحالي مساويًا لوقت بدئه أو أكبر منه بالإضافة إلى التأخير. الجانب السلبي لهذا الأسلوب هو أنه مكثف لوحدة المعالجة المركزية ، خاصة مع فترات التأخير الكبيرة. ال افعل... أثناء التكرار يجب أن يحسب الوقت المتبقي بعد كل مللي ثانية.

استخدام Async / Await لتأخير برنامج Node.js

ان انتظر يؤدي التعبير إلى توقف التنفيذ مؤقتًا حتى يتم حل الوعد. يتيح لك تشغيل التعليمات البرمجية غير المتزامنة كما لو كانت متزامنة ، ولكن بشكل أكثر كفاءة من حظر التنفيذ يدويًا. يمكنك فقط استخدام انتظار داخل دالة مميزة غير متزامن.

وظيفةتأخير(الوقت) {
إرجاعالجديديعد(حل => setTimeout (حل ، الوقت)) ؛
}

غير متزامنوظيفةprintSentence() {
console.log ("مرحبا بالعالم")
انتظر تأخير(2000);
console.log ("ستتم طباعتها بعد ثانيتين");
}

printSentence () ؛

هذا هو ناتج البرنامج أعلاه:

مرحبا بالعالم
ستتم طباعتها بعد ثانيتين

استخدام حزمة وعد النوم

ال وعد بالنوم تعمل الحزمة على تبسيط عملية الإيقاف المؤقت لبرامج Node.js. ما عليك سوى الاتصال به وتحديد وقت التأخير بالمللي ثانية.

ابدأ بتثبيته عبر npm:

npm التثبتنايم-يعد

فيما يلي مثال على كيفية استخدامه في برنامجك:

مقدار ثابت النوم = تطلب("وعد بالنوم") ؛

(غير متزامن () => {
console.log ("مرحبا بالعالم.");
انتظر نايم(2000);
console.log ("ستتم طباعتها بعد ثانيتين.");
})();

عند تشغيل البرنامج ، سيكون الإخراج على النحو التالي.

مرحبا بالعالم.
ستتم طباعتها بعد ثانيتين.

اختيار النهج المناسب

قد يكون تنفيذ وظيفة السكون في Node.js أمرًا صعبًا. عند اتخاذ قرار بشأن كيفية القيام بذلك ، ضع في اعتبارك ما تريد تحقيقه. إذا كنت تريد فقط تأخير بعض التعليمات البرمجية ، لأقل قدر من الوقت ، setTimeout () هو خيار جيد. ولكن إذا كنت تريد إيقاف تنفيذ البرنامج بأكمله مؤقتًا ، فيجب عليك استخدام غير متزامن / انتظار.

متزامن مقابل. البرمجة غير المتزامنة: ما مدى اختلافها؟

اقرأ التالي

شاركسقسقةشاركبريد الالكتروني

مواضيع ذات صلة

  • برمجة
  • تطوير الشبكة
  • برمجة
  • جافا سكريبت

نبذة عن الكاتب

ماري جاثوني (تم نشر 19 مقالة)

ماري جاثوني هي مطورة برامج لديها شغف لإنشاء محتوى تقني ليس إعلاميًا فحسب ، بل جذابًا أيضًا. عندما لا تقوم بالبرمجة أو الكتابة ، فإنها تستمتع بالتسكع مع الأصدقاء والتواجد في الهواء الطلق.

المزيد من Mary Gathoni

اشترك في نشرتنا الإخبارية

انضم إلى النشرة الإخبارية لدينا للحصول على نصائح تقنية ومراجعات وكتب إلكترونية مجانية وصفقات حصرية!

انقر هنا للاشتراك