"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > فهم الوعود وتسلسل الوعود في جافا سكريبت

فهم الوعود وتسلسل الوعود في جافا سكريبت

تم النشر بتاريخ 2024-11-05
تصفح:848

Understanding Promises and Promise Chaining in JavaScript

ما هو الوعد؟

الوعد في JavaScript يشبه "الوعد" الذي تقطعه للقيام بشيء ما في المستقبل. إنه كائن يمثل الإكمال (أو الفشل) النهائي لمهمة غير متزامنة وقيمتها الناتجة. ببساطة، يعمل الوعد كعنصر نائب لقيمة غير متوفرة بعد ولكنها ستكون موجودة في المستقبل.

الدول الوعدية

يمكن أن توجد الوعود في إحدى الحالات الثلاث:

  1. معلق: الحالة الأولية للوعد، حيث لا يزال ينتظر اكتمال مهمة المزامنة.
  2. تم التنفيذ: الحالة التي اكتمل فيها الوعد بنجاح، وكانت القيمة الناتجة متاحة.
  3. مرفوض: الحالة التي يفشل فيها الوعد، ويتم إرجاع خطأ بدلاً من القيمة المتوقعة.

كيف يعمل الوعد؟

يتم إنشاء الوعد باستخدام مُنشئ الوعد، والذي يأخذ معلمتين: الحل والرفض — وكلاهما وظيفتان.

إذا نجحت عملية المزامنة، يمكنك استدعاء وظيفة الحل للوفاء بالوعد.
إذا حدث خطأ ما، يمكنك استدعاء وظيفة الرفض للإشارة إلى أنه تم رفض الوعد بسبب خطأ.
يمكنك التعامل مع نتيجة الوعد باستخدام .then() للنجاح و .catch() لمعالجة الأخطاء.

مثال: إنشاء الوعد وتنفيذه

const fetchData = new Promise((resolve, reject) => {
  // Simulate an asynchronous task like fetching data from a server
  setTimeout(() => {
    const data = "Some data from the server";

    // Simulate success and resolve the promise
    resolve(data);

    // You can also simulate an error by rejecting the promise
    // reject(new Error("Failed to fetch data"));
  }, 1000);
});

// Consuming the Promise
fetchData
  .then((data) => {
    console.log("Data fetched:", data);
  })
  .catch((error) => {
    console.error("Error fetching data:", error);
  });

سيعيد العزم (البيانات) البيانات الناجحة عند الوفاء بالوعد.
إذا حدث خطأ ما، فسيؤدي الرفض (خطأ) إلى ظهور خطأ يمكن معالجته باستخدام .catch().

ما هو تسلسل الوعد؟

تسلسل الوعود هو عملية تنفيذ سلسلة من المهام غير المتزامنة، واحدة تلو الأخرى، باستخدام الوعود. تعمل كل طريقة ‎.then()‎ في السلسلة بعد استيفاء الطريقة السابقة.

لماذا استخدام تسلسل الوعد؟

يسمح لك بكتابة تعليمات برمجية نظيفة وقابلة للقراءة للتعامل مع عمليات متعددة غير متزامنة بترتيب معين. يمكن لكل ‎.then()‎ إرجاع قيمة يتم تمريرها إلى ‎.then() التالي في السلسلة، مما يسمح لك بمعالجة المهام خطوة بخطوة.

مثال: تسلسل الوعود المتعددة

new Promise((resolve, reject) => {
  setTimeout(() => resolve(1), 1000); // Initial async task resolves with 1
})
  .then((result) => {
    console.log(result); // Logs: 1
    return result * 2;   // Returns 2 to the next .then()
  })
  .then((result) => {
    console.log(result); // Logs: 2
    return result * 3;   // Returns 6 to the next .then()
  })
  .then((result) => {
    console.log(result); // Logs: 6
    return result * 4;   // Returns 24 to the next .then()
  });

في هذا المثال:

يبدأ الوعد بالحل بـ 1 بعد ثانية واحدة.
كل .then() لاحقة تتلقى النتيجة من السابقة، وتضاعفها أو تضاعفها ثلاث مرات، وتمررها إلى .then() التالية.
يتم تسجيل النتيجة خطوة بخطوة: 1، 2، 6.
معالجة الأخطاء في التسلسل
يمكنك اكتشاف أي خطأ في سلسلة الوعد باستخدام .catch(). إذا فشل أي من .then()، تتوقف السلسلة، ويتم تمرير الخطأ إلى كتلة .catch().

new Promise((resolve, reject) => {
  setTimeout(() => resolve(1), 1000);
})
  .then((result) => {
    console.log(result); // Logs: 1
    return result * 2;
  })
  .then((result) => {
    throw new Error("Oops, something went wrong!");
  })
  .catch((error) => {
    console.error("Caught error:", error.message); // Catches the error
  });

الفوائد الرئيسية للوعود

  • يتجنب جحيم رد الاتصال: تعمل الوعود على تبسيط إدارة عمليات متعددة غير متزامنة، مما يؤدي بخلاف ذلك إلى عمليات رد اتصال متداخلة بشدة (تُعرف أيضًا باسم جحيم رد الاتصال).
  • معالجة الأخطاء: يمكنك معالجة جميع الأخطاء في السلسلة باستخدام .catch() واحد في النهاية.
  • التنفيذ المتسلسل: يضمن تسلسل الوعد تنفيذ المهام غير المتزامنة بالترتيب، مما يسهل التفكير في التعليمات البرمجية.

خاتمة

تعد الوعود أداة قوية في JavaScript للتعامل مع المهام غير المتزامنة. باستخدام Promise Chaining، يمكنك إدارة عمليات غير متزامنة متعددة بطريقة نظيفة وقابلة للقراءة ومتسلسلة. من خلال فهم كيفية إنشاء الوعود واستخدامها وربطها معًا، ستكون في طريقك إلى إتقان البرمجة غير المتزامنة في JavaScript!

بيان الافراج تم نشر هذه المقالة على: https://dev.to/nurmuhammadd/understanding-promises-and-promise-chaining-in-javascript-gkf?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3