تعد البرمجة غير المتزامنة جانبًا رئيسيًا في JavaScript يسمح للمطورين بتنفيذ طلبات الشبكة الطويلة وعمليات الملفات والمهام الأخرى التي تستغرق وقتًا طويلاً دون حظر سلسلة المحادثات الرئيسية. وهذا يضمن أن تظل التطبيقات سريعة الاستجابة وسهلة الاستخدام. توفر JavaScript ثلاث طرق رئيسية للتعامل مع العمليات غير المتزامنة: عمليات الاسترجاعات والوعود وعدم المزامنة/الانتظار. في هذه المقالة، سوف نتعمق في كل من هذه الطرق، ونستكشف تركيبها، واستخدامها، والاختلافات من خلال أمثلة مفصلة.
في JavaScript، يمكن التعامل مع العمليات التي تستغرق وقتًا حتى تكتمل، مثل جلب البيانات من الخادم، أو قراءة الملفات، أو إجراء العمليات الحسابية، بشكل غير متزامن. وهذا يعني أنه أثناء انتظار اكتمال العملية، يمكن لمحرك JavaScript الاستمرار في تنفيذ مهام أخرى. وهذا أمر بالغ الأهمية لإنشاء تجارب مستخدم فعالة وسلسة في تطبيقات الويب.
تعد عمليات الاسترجاعات إحدى أقدم الطرق للتعامل مع العمليات غير المتزامنة في JavaScript. رد الاتصال هو ببساطة دالة تم تمريرها كوسيطة إلى دالة أخرى، والتي سيتم تنفيذها بمجرد اكتمال العملية غير المتزامنة.
function fetchData(callback) { setTimeout(() => { callback("Data fetched!"); }, 1000); } function displayData(data) { console.log(data); } fetchData(displayData);
في المثال أعلاه، يحاكي fetchData عملية غير متزامنة باستخدام setTimeout. بعد ثانية واحدة، تقوم باستدعاء الدالة DisplayData، وتمرير البيانات التي تم جلبها كوسيطة.
مزايا:
سلبيات:
تم تقديم الوعود في ES6 (ECMAScript 2015) لمعالجة المشكلات المرتبطة بعمليات الاسترجاعات. يمثل الوعد عملية لم تكتمل بعد ولكنها متوقعة في المستقبل. يمكن أن يكون في إحدى الحالات الثلاث: معلق أو مستوفي أو مرفوض.
function fetchData() { return new Promise((resolve, reject) => { setTimeout(() => { resolve("Data fetched!"); }, 1000); }); } fetchData() .then(data => { console.log(data); }) .catch(error => { console.error("Error:", error); });
في هذا المثال، تقوم fetchData بإرجاع وعد يتم حله بـ "تم جلب البيانات!" بعد 1 ثانية. يتم استخدام الطريقةthen لمعالجة القيمة التي تم حلها، ويتم استخدام طريقة الالتقاط لمعالجة أي أخطاء.
يمكن ربط الوعود لتنفيذ سلسلة من العمليات غير المتزامنة بالتسلسل.
function fetchData() { return new Promise((resolve, reject) => { setTimeout(() => { resolve("Data fetched!"); }, 1000); }); } function processData(data) { return new Promise((resolve, reject) => { setTimeout(() => { resolve(`${data} Processed!`); }, 1000); }); } fetchData() .then(data => { console.log(data); return processData(data); }) .then(processedData => { console.log(processedData); }) .catch(error => { console.error("Error:", error); });
في هذا المثال، يتم استدعاء بيانات العملية بعد fetchData، ويتم التعامل مع النتائج بالتسلسل باستخدام ثم.
مزايا:
سلبيات:
Async/Await، الذي تم تقديمه في ES2017، يوفر طريقة أكثر إيجازًا وقابلية للقراءة لكتابة تعليمات برمجية غير متزامنة باستخدام Promises. يتم استخدام الكلمة الأساسية غير المتزامنة لتحديد وظيفة غير متزامنة، ويتم استخدام الكلمة الأساسية "انتظار" لإيقاف التنفيذ مؤقتًا حتى يتم حل الوعد.
async function fetchData() { return new Promise((resolve, reject) => { setTimeout(() => { resolve("Data fetched!"); }, 1000); }); } async function displayData() { const data = await fetchData(); console.log(data); } displayData();
في هذا المثال، تعتبر DisplayData وظيفة غير متزامنة تنتظر اكتمال عملية جلب البيانات قبل تسجيل البيانات.
يمكن معالجة الأخطاء باستخدام Async/Await باستخدام كتل المحاولة/الالتقاط.
async function fetchData() { return new Promise((resolve, reject) => { setTimeout(() => { reject("Failed to fetch data!"); }, 1000); }); } async function displayData() { try { const data = await fetchData(); console.log(data); } catch (error) { console.error("Error:", error); } } displayData();
هنا، إذا فشل جلب البيانات، فسيتم اكتشاف الخطأ وتسجيله بواسطة كتلة الالتقاط.
مزايا:
سلبيات:
تعد البرمجة غير المتزامنة في JavaScript ضرورية لبناء تطبيقات سريعة الاستجابة وفعالة. يتيح فهم الاختلافات بين عمليات الاسترجاعات والوعود وعدم المزامنة/الانتظار للمطورين اختيار الأداة المناسبة لحالة الاستخدام الخاصة بهم. في حين أن عمليات الاسترجاعات هي أبسط أشكال التعامل مع العمليات غير المتزامنة، إلا أنها يمكن أن تؤدي إلى تعليمات برمجية فوضوية. تقدم الوعود نهجًا أكثر تنظيماً، لكن Async/Await يوفر الحل الأكثر أناقة وقابلية للقراءة. ومن خلال اتباع أفضل الممارسات وفهم هذه الأدوات، يمكن للمطورين كتابة تعليمات برمجية غير متزامنة نظيفة وقابلة للصيانة وفعالة.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3