91- دروس جافا سكربت – التزامن – JS Asynchronous

### البرمجة غير المتزامنة في JavaScript

تُعتبر البرمجة غير المتزامنة (Asynchronous Programming) في JavaScript جزءًا أساسيًا من تطوير التطبيقات الحديثة، خاصةً عندما يتعلق الأمر بالتفاعل مع واجهات برمجة التطبيقات (APIs) أو التعامل مع العمليات التي تتطلب وقتًا طويلاً، مثل استرجاع البيانات من الخادم. في هذا المقال، سنقدم شرحًا مفصلًا عن البرمجة غير المتزامنة في JavaScript ونوضح كيفية استخدامها بفعالية.

#### ما هي البرمجة غير المتزامنة؟

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

#### الآليات الرئيسية للبرمجة غير المتزامنة في JavaScript

1. **Callbacks (الدوال الاسترجاعية):**
– تعتبر الدوال الاسترجاعية من أبسط الطرق لتنفيذ البرمجة غير المتزامنة. يتم تمرير دالة كوسيط إلى دالة أخرى ليتم استدعاؤها عند انتهاء العملية.
[شركة برمجة مصرية] مثال:

function fetchData(callback) {
       setTimeout(() => {
         console.log("Data fetched");
         callback("Data received");
       }, 2000);
     }

     fetchData((message) => {
       console.log(message);
     });
     

2. **Promises (الوعود):**
– تقدم الوعود طريقة أفضل للتعامل مع العمليات غير المتزامنة، حيث تساعد في تجنب “جحيم الدوال الاسترجاعية” (Callback Hell) وتجعل الكود أكثر نظافة وقابلية للفهم.
– مثال:

let fetchData = new Promise((resolve, reject) => {
       setTimeout(() => {
         let success = true; // تغيير هذه القيمة لتجربة حالة الرفض
         if (success) {
           resolve("Data fetched successfully");
         } else {
           reject("Failed to fetch data");
         }
       }, 2000);
     });

     fetchData
       .then((message) => {
         console.log(message);
       })
       .catch((error) => {
         console.error(error);
       });
     

3. **Async/Await:**
– تُعتبر كلمات async و await تحسينًا على الوعود، حيث توفر طريقة أكثر سلاسة وقراءة للتعامل مع العمليات غير المتزامنة.
– مثال:

function fetchData() {
       return new Promise((resolve, reject) => {
         setTimeout(() => {
           resolve("Data fetched successfully");
         }, 2000);
       });
     }

     async function getData() {
       try {
         const message = await fetchData();
         console.log(message);
       } catch (error) {
         console.error(error);
       }
     }

     getData();
     

#### متى نستخدم البرمجة غير المتزامنة؟

– **استدعاء API:** عند جلب البيانات من خادم عن طريق API، يمكن أن تستغرق هذه العملية بعض الوقت. باستخدام البرمجة غير المتزامنة، يمكن للمستخدم مواصلة التفاعل مع التطبيق دون انتظار.
– **عمليات الإدخال/الإخراج:** مثل قراءة أو كتابة [شركة برمجة مصرية] الملفات، حيث يمكن أن تكون هذه العمليات بطيئة وتعوق الأداء إذا لم تُنفذ بشكل غير متزامن.
– **العمليات الحسابية المكثفة:** إذا كانت هناك عمليات حسابية معقدة، فإن تنفيذها بشكل غير متزامن يمكن أن يمنع توقف التطبيق أثناء إجراء الحسابات.

#### خلاصة

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