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

السؤال

نشر (معدل)

سلام عليكم

 event لدى هذا الكود فرايد ان اعرف ما يسمى هذا فى البرمجة من 

const { readFile, writeFile } = require('fs')

console.log('started a first task')
// CHECK FILE PATH!!!!
readFile('./content/first.txt', 'utf8', (err, result) => {
  if (err) {
    console.log(err)
    return
  }
  console.log(result)
  console.log('completed first task')
})
console.log('starting next task')

وايضا نتيجة تنفيذ الكود لماذا نفذت بهذه الطريقة مع شرح خطوات التنفيذ  

وشكرا

 

Untitled.png

تم التعديل في بواسطة Hassan Hedr
توضيح السؤال

Recommended Posts

  • 0
نشر

المثال السابق يقوم بطباعة بعض السطور وقراءة ملف وطباعة محتوياته

بالنسبة لترتيب تنفيذ هذه الأوامر فهو متعلق بطريقة عمل JavaScript و حلقة الأحداث Event Loop يمكن القراءة عنها في المقال التالي

أولا ينفذ السطر 

console.log('started a first task')

// started a first task

بعدها ينفذ الأمر التالي والذي يبدأ عملية قراءة الملف والأهم تسجيل التابع الممرر ليتم استدعاءه لاحقا عند الانتهاء من القراءة، تنفيذ التابع سيأخذ دوره في حلقة الاحداث ولا يستدعى التابع حتى يحين دوره (لا خرج في تنفيذ هذه المرحلة)

readFile('./content/first.txt', 'utf8', (err, result) => { ... })

//

بعدها ينفذ السطر التالي

console.log('starting next task')

// starting next task

لقد انتهت عملية تنفيذ جميع التعليمات في الملف، الان يتم اخذ التعليمات الموجودة في حلقة الأحداث Event Loop ويتم تنفيذها بالتتالي، إذا كانت الحلقة فارغة وليس هناك اجرائيات أبناء للاجرئية الحالية سيتم الانتهاء من التنفيذ والخروج فورا

في حالتنا لا تزال عملية القراءة قائمة وعندما تنتهي ستقوم باستدعاء التابع الذي ممرته لها سابقا الذي سينتظر في حلقة الاحداث ليأتي دوره والآن دور حلقة الأحداث لذا ستنفذ محتويات التابع التالي

(err, result) => {
  if (err) {
    console.log(err)
    return
  }
  console.log(result)
  console.log('completed first task')
}


// ... محتويات الملف ...
// completed first task

الغرض من تصميم التنفيذ بهذه الطريقة والذي يدعى Non-Blocking I/O هو عدم اشغال الاجرائية الحالية بعمليات القراءة والكتابة الخارجية، حيث يتم تنفيذ جميع التعليمات الآن وتأجيل التعليمات الغير متزامنة Asynchronous لوقت لاحق

  • 0
نشر
بتاريخ 5 دقائق مضت قال Mohamed Abdalla6:

ايضا ما فهمت

لماذا لم ينفذ 


readFile('./content/first.txt', 'utf8', (err, result) => { ... })

قبل


console.log(result)

 

نفذ التابع قبل إظهار الخرج لا يمكن أن يحدث العكس

يتم تنفيذ استدعاء تابع قراءة الملف أولا

readFile('./content/first.txt', 'utf8', (err, result) => { ... })

ثم عند انتهاء قراءة الملف يتم استدعاء التابع الممرر للتابع السابق والذي يحوي السطر التالي

console.log(result)

 

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...