في هذا القسم ، دعنا نتعرف على طرق NodeJS لتنفيذ عمليات عدم الحظر.
دعنا أولاً نعدل معالج البدء:
نسخة الكود كما يلي:
var exec = required ("child_process"). exec ؛
وظيفة start () {
console.log ("تم استدعاء معالج الطلب" Start ".") ؛
var content = "فارغة" ؛
exec ("ls -lah" ، وظيفة (خطأ ، stdout ، stderr) {
المحتوى = stdout ؛
}) ؛
إرجاع المحتوى ؛
}
وظيفة تحميل () {
console.log ("تم استدعاء معالج الطلب" تحميل ".") ؛
إرجاع "Hello Upload" ؛
}
orports.start = start ؛
orports.upload = تحميل ؛
يقوم هذا الرمز بإنشاء محتوى متغير جديد (القيمة الأولية "فارغة") ، ويقوم بتنفيذ الأمر "LS -LAH" ، ويعين النتيجة إلى المحتوى ، ويعيد المحتوى أخيرًا.
لقد قدمنا وحدة Node.js جديدة ، Child_Process ، والتي تستخدم لتنفيذ عملية غير محبوطة بسيطة وعملية: exec ().
إذن ماذا يفعل exec ()؟
ينفذ أمر شل من Node.js. في المثال أعلاه ، نستخدمه للحصول على جميع الملفات في الدليل الحالي ("LS -Lah") ، ثم إخراج معلومات الملف إلى المتصفح عندما /starturl طلبات.
نبدأ الخادم وزيارة "http: // localhost: 8888/start" وسوف نجد أن إخراج المحتوى في الصفحة فارغ.
يعمل Exec () ، ومعه يمكننا إجراء عمليات قذيفة تستغرق وقتًا طويلاً دون إجبار تطبيقنا على التوقف وانتظار هذه العملية.
على الرغم من ذلك ، لا يبدو أن إخراج محتوى الصفحة هو النتيجة التي نريدها.
دعونا نحلل الأسباب:
يتم تنفيذ الكود الخاص بنا بشكل متزامن ، مما يعني أنه بعد استدعاء exec () ، سيتم تنفيذ Node.js محتوى الإرجاع على الفور ؛
في هذا الوقت ، لا يزال المحتوى "فارغًا" ، لأنه لم يتم تنفيذ وظيفة رد الاتصال إلى Exec () بعد - لأن تشغيل exec () غير متزامن.
في القسم التالي ، سنشرح كيفية حل هذه المشكلة.