JS

الجزء الرابع عشر – المتقدم (Advanced) Asynchronous JavaScript – سلسلة FSWD – JS

🟡 1. setTimeout & setInterval

setTimeout

دالة setTimeout() بتنفذ دالة معينة بعد فترة زمنية محددة (بالميلي ثانية). بتستخدم لتنفيذ كود بشكل غير متزامن بعد فترة معينة.

التركيب

setTimeout(function, delay);
  • function: الدالة اللي هتتنفذ بعد التأخير.

  • delay: التأخير بالميلي ثانية.

✅ مثال

console.log("Start");

setTimeout(() => {
  console.log("This is printed after 2 seconds");
}, 2000);  // 2000 ملي ثانية = 2 ثواني

console.log("End");

النتيجة المتوقعة

Start
End
This is printed after 2 seconds

التفسير: الكود بينفذ بالتتابع، والدالة داخل setTimeout() هتتنفذ بعد التأخير اللي هو 2 ثانية.

setInterval

دالة setInterval() بتنفذ الدالة بشكل متكرر على فترات زمنية محددة.

التركيب

setInterval(function, delay);
  • function: الدالة اللي هتتنفذ بشكل متكرر.

  • delay: الفاصل الزمني بالميلي ثانية بين كل تنفيذ.

✅ مثال

let count = 0;

const intervalID = setInterval(() => {
  count++;
  console.log(`Count: ${count}`);
  
  if (count === 5) {
    clearInterval(intervalID);  // وقف التكرار بعد 5 مرات
  }
}, 1000);  // 1000 ملي ثانية = 1 ثانية

النتيجة المتوقعة:

Count: 1
Count: 2
Count: 3
Count: 4
Count: 5

التفسير: الدالة في setInterval() هتتنفذ كل ثانية، وهنوقف التكرار باستخدام clearInterval() بعد 5 مرات.


🟡 2. Callback functions

الدوال الاسترجاعية (Callback functions) هي دوال بتتحدد في وقت لاحق، وتُنفذ بعد اكتمال عملية معينة.

✅ مثال

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

function displayData(data) {
  console.log(data);  // "Data received"
}

fetchData(displayData);

الشرح: الدالة fetchData() بتنفذ عملية غير متزامنة (مثل جلب بيانات من السيرفر) وبعد ما تخلص، هيتم استدعاء دالة displayData باستخدام Callback.


🟡 3. Promises

الـ Promises هي طريقة للتعامل مع العمليات غير المتزامنة بشكل أكثر وضوحًا وهي تعتمد على حالة الكود:

  • Pending: في حالة المعالجة.

  • Fulfilled: العملية تمت بنجاح.

  • Rejected: العملية فشلت.

تركيب الـ Promise

let promise = new Promise(function(resolve, reject) {
  // العملية غير المتزامنة
  let success = true;

  if (success) {
    resolve("Success!");
  } else {
    reject("Error!");
  }
});

promise.then(
  (message) => console.log(message),  // if resolved
  (message) => console.log(message)   // if rejected
);

✅ مثال مع then و catch:

let myPromise = new Promise((resolve, reject) => {
  let success = true;
  
  if (success) {
    resolve("Data is loaded successfully");
  } else {
    reject("Error in loading data");
  }
});

myPromise
  .then((message) => console.log(message))   // إذا كانت النتيجة ناجحة
  .catch((message) => console.log(message)); // إذا كانت النتيجة فاشلة

 

النتيجة المتوقعة:

Data is loaded successfully

🟡 4. async / await

الـ async/await هما طريقة مختصرة للعمل مع Promises. بيخلوا الكود المتعلق بالعمليات غير المتزامنة يبدو متسلسلًا وواضحًا.

async function:

  • بتحدد أن الدالة هترجع Promise.

  • بتسمح باستخدام await داخلها.

await:

  • بيخلي الكود ينتظر لحد ما الـ Promise يتم حلها أو رفضها.

✅ مثال باستخدام async/await:

function fetchData() {
  return new Promise((resolve, reject) => {
    let success = true;
    
    setTimeout(() => {
      if (success) {
        resolve("Data is successfully fetched");
      } else {
        reject("Error fetching data");
      }
    }, 2000);
  });
}

async function getData() {
  try {
    let result = await fetchData();
    console.log(result);  // "Data is successfully fetched"
  } catch (error) {
    console.log(error);   // in case of error
  }
}

getData();

 

النتيجة المتوقعة:

Data is successfully fetched

التفسير:

  • الكود يستخدم async لتحديد أن الدالة getData() غير متزامنة.

  • await بيسمح بانتظار fetchData() لحد ما تخلص وتُرجع نتيجة.

  • try/catch لتعامل مع الأخطاء.


مثال كامل يجمع كل الأفكار

<!DOCTYPE html>
<html lang="ar">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Asynchronous JavaScript</title>
</head>
<body>
  <script>
    // 1. setTimeout & setInterval
    setTimeout(() => {
      console.log("This is printed after 3 seconds");
    }, 3000);
    
    let count = 0;
    const intervalID = setInterval(() => {
      count++;
      console.log(`Count: ${count}`);
      
      if (count === 5) {
        clearInterval(intervalID);  // وقف التكرار بعد 5 مرات
      }
    }, 1000);  // 1000 ملي ثانية = 1 ثانية

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

    function displayData(data) {
      console.log(data);
    }

    fetchData(displayData);

    // 3. Promises
    let promise = new Promise((resolve, reject) => {
      let success = true;
      
      if (success) {
        resolve("Data is loaded successfully");
      } else {
        reject("Error in loading data");
      }
    });

    promise
      .then((message) => console.log(message))   // إذا كانت النتيجة ناجحة
      .catch((message) => console.log(message)); // إذا كانت النتيجة فاشلة

    // 4. async/await
    async function getData() {
      try {
        let result = await fetchDataAsync();
        console.log(result);
      } catch (error) {
        console.log(error);
      }
    }

    function fetchDataAsync() {
      return new Promise((resolve, reject) => {
        let success = true;

        setTimeout(() => {
          if (success) {
            resolve("Data fetched successfully with async/await");
          } else {
            reject("Error with async/await");
          }
        }, 2000);
      });
    }

    getData();
  </script>
</body>
</html>

شرح الكود:

  1. setTimeout & setInterval: تم استخدامهم لتأخير التنفيذ وتنفيذ التكرار.

  2. Callback function: استخدمنا الدالة fetchData مع Callback لانتظار البيانات.

  3. Promises: تعاملنا مع البيانات باستخدام Promises.

  4. async/await: استخدمنا async/await لتبسيط التعامل مع العمليات غير المتزامنة.


ملخص النقاط:

  1. setTimeout & setInterval: أدوات لتأخير التنفيذ أو تنفيذ الدوال بشكل متكرر.

  2. Callback functions: دوال تُنفذ بعد إتمام عملية غير متزامنة.

  3. Promises: التعامل مع العمليات غير المتزامنة بطريقة أكثر وضوحًا.

  4. async/await: طريقة مختصرة للانتظار والتعامل مع Promises بشكل متسلسل وواضح.

 

فرص الربح من الإنترنت

💰 هل تبحث عن طريقة سهلة للربح من الإنترنت؟

ابدأ الآن واكسب أموالًا حقيقية من خلال خطوات بسيطة! 🌟

اضغط وابدأ الربح

📱 اربح من هاتفك فقط!

كل ما تحتاجه هو اتصال بالإنترنت وبعض الوقت ⏳

ابدأ الربح الآن

🚀 اربح المال وأنت في بيتك

الفرصة أمامك الآن وبخطوات سهلة ومضمونة!

من هنا تبدأ رحلتك

🔥 لا تحتاج إلى خبرة أو رأس مال!

اربح الآن من الإنترنت بأبسط الطرق

اضغط هنا للربح

💸 دخل إضافي بدون تعب؟

🤩 هذه فرصتك لتبدأ في الربح من الإنترنت!

سارع الآن

مقالات ذات صلة

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

زر الذهاب إلى الأعلى