معالجة الأحداث وعدم التزامن في Node.js

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

 

الأحداث والأحداث callback في Node.js

في Node.js ، callback تلعب الأحداث والأحداث دورًا مهمًا في التعامل مع العمليات غير المتزامنة. الأحداث هي طريقة للتعامل مع إجراءات أو أحداث معينة تحدث داخل التطبيق والاستجابة لها. Callback من ناحية أخرى ، تعد s وظائف يتم تنفيذها بمجرد اكتمال حدث أو عملية معينة.

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

Callback تُستخدم s بشكل شائع في Node.js للتعامل مع العمليات غير المتزامنة. يتم تمريرها كوسيطات للوظائف ويتم تنفيذها بمجرد اكتمال العملية. Callback توفر s طريقة للتعامل مع النتائج أو الأخطاء التي تحدث أثناء المهام غير المتزامنة.

فيما يلي مثال على استخدام callback في Node.js:

// A function that takes a callback
function fetchData(callback) {  
  // Simulate fetching data from an asynchronous operation  
  setTimeout(() => {  
    const data = { name: 'John', age: 30 };  
    callback(null, data); // Pass the data to the callback  
  }, 2000); // Simulate a 2-second delay  
}  
  
// Call the fetchData function and provide a callback  
fetchData((error, data) => {  
  if(error) {  
    console.error('Error:', error);  
  } else {  
    console.log('Data:', data);  
  }  
});  

في هذا المثال ، لدينا وظيفة تسمى fetchData تحاكي جلب البيانات من عملية غير متزامنة(على سبيل المثال ، إجراء استدعاء API أو الاستعلام عن قاعدة بيانات). يأخذ callback وظيفة كحجة.

داخل fetchData الوظيفة ، نستخدمها setTimeout لمحاكاة العملية غير المتزامنة. بعد التأخير الذي مدته ثانيتان ، نقوم بإنشاء بعض عينات البيانات ونمررها إلى الوظيفة callback مع خطأ(يتم تعيينه null في هذه الحالة).

خارج الوظيفة fetchData ، نسميها ونقدم وظيفة callback. في الولايات المتحدة callback ، نتعامل مع أي أخطاء محتملة ونعالج البيانات المستلمة. إذا كان هناك خطأ ، نقوم بتسجيله في وحدة التحكم. خلاف ذلك ، نقوم بتسجيل البيانات.

هذا مثال أساسي لاستخدام callback في Node.js للتعامل مع العمليات غير المتزامنة والتأكد من معالجة البيانات بمجرد توفرها. في سيناريوهات العالم الحقيقي ، callback تُستخدم s بشكل شائع لمعالجة استعلامات قاعدة البيانات وطلبات واجهة برمجة التطبيقات والمهام الأخرى غير المتزامنة.

 

استخدام Promise s والتعامل مع عدم التزامن async/await

يعد "استخدام العمليات غير المتزامنة Promise والتعامل معها" أسلوبًا شائعًا في Node.js للتعامل مع المهام غير المتزامنة بطريقة سهلة وفعالة. هو كائن يساعدنا في إدارة العمليات غير المتزامنة والتعامل معها ، في حين أنه عبارة عن بناء جملة يسمح لنا بكتابة تعليمات برمجية غير متزامنة بطريقة مشابهة للتعليمات البرمجية المتزامنة. async/await Promise JavaScript async/await

باستخدام Promise و ، يمكننا كتابة التعليمات البرمجية غير المتزامنة بسهولة أكبر وبشكل حدسي. لم نعد بحاجة إلى استخدام الوظائف والتعامل مع الجحيم( الوظائف المتداخلة) للتعامل مع العمليات غير المتزامنة. بدلاً من ذلك ، يمكننا استخدام الكلمة الأساسية انتظار لانتظار اكتمال a وإرجاع نتيجتها. async/await callback callback callback Promise

فيما يلي مثال على استخدام Promise و Node.js للتعامل مع العمليات غير المتزامنة: async/await

// A mock function to fetch data from an API  
function fetchData() {  
  return new Promise((resolve, reject) => {  
    setTimeout(() => {  
      const data = { name: 'John', age: 30 };  
      resolve(data); // Return data within the Promise  
    }, 2000);  
  });  
}  
  
// Using async/await to handle asynchronous operations  
async function getData() {  
  try {  
    const data = await fetchData(); // Wait for the Promise to complete and return the data  
    console.log('Data:', data);  
  } catch(error) {  
    console.error('Error:', error);  
  }  
}  
  
// Call the getData function  
getData();  

في هذا المثال ، نستخدم الوظيفة fetchData لمحاكاة جلب البيانات من واجهة برمجة التطبيقات(أو أي عملية غير متزامنة). تقوم هذه الوظيفة بإرجاع a Promise ، حيث نقوم باستدعاء resolve الدالة لإرجاع البيانات.

خارج الوظيفة fetchData ، نستخدم try/catch كتلة للتعامل مع الأخطاء. في getData الوظيفة ، نستخدم await الكلمة الرئيسية لانتظار Promise اكتمال البيانات وإرجاعها. إذا كان هناك خطأ في Promise ، فسيتم طرح استثناء ونتعامل معه في الكتلة catch.

أخيرًا ، نقوم باستدعاء getData الوظيفة لبدء المعالجة غير المتزامنة. سيتم تسجيل النتيجة في وحدة التحكم بعد Promise اكتمال وإرجاع البيانات.

استخدام الكود الخاص بنا Promise وجعله أكثر قابلية للقراءة وأسهل للفهم عند التعامل مع العمليات غير المتزامنة. يساعدنا على تجنب الجحيم ويسمح لنا بكتابة التعليمات البرمجية بطريقة متسلسلة ، على غرار كتابة التعليمات البرمجية المتزامنة. async/await callback

 

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