اذهب إلى المحتوى
  • 0

promise

ماريا ال داؤود

السؤال

Recommended Posts

  • 0
نشر

ببساطة يعتبر ال Promise هو كائن (Object) يعرض النتيجة النهائية لعملية غير متزامنة (Asynchronous Operation)، سواء كانت هذه النتيجة نجاحاً أو فشلاً . أي تستخدم الـ Promise عندما يكون لديك كود يستغرق وقتاً للتنفيذ، ولا تريد أن يتوقف باقي البرنامج عن العمل حتى ينتهي هذا الكود (Non-blocking). من أشهر حالات الاستخدام جلب البيانات من خوادم خارجية 

وللتوضيح أكثر يرجى الإطلاع على المقالة التالي

 

  • 0
نشر

وعليكم السلام ورحمة الله تعالى وبركاته،

Promise هو كائن في JavaScript يمثل نتيجة عملية غير متزامنة، وله ثلاث حالات وهي pending أي قيد الانتظار، fulfilled أي اكتملت بنجاح، وrejected أي فشلت ونستخدمه عندما تحتاج لتنفيذ عملية تستغرق وقتا كجلب بيانات من API أو قراءة ملف من القرص، دون أن نوقف باقي الكود عن العمل في نفس الوقت وللتعامل مع النتيجة نستخدم .then() عند النجاح و.catch() عند الفشل، أو الطريقة الأحدث والأوضح وهي async/await وهذا مثال بسيط:

fetch('https://api.example.com/data')
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.log('حدث خطأ:', error));

أو بطريقة async/await:

async function getData() {
  try {
    const response = await fetch('https://api.test.com/data');
    const data = await response.json();
    console.log(data);
  } catch (error) {
    console.log('حدث خطأ:', error);
  }
}
  • 0
نشر

وعليكم السلام ورحمة الله،

الفرق بين Promise.all وPromise.allSettled وPromise.race والذي يغفله الكثير هو كالتالي:

// all: يفشل كله إذا فشل واحد
const [a, b] = await Promise.all([req1(), req2()]);

// allSettled: يكمل حتى لو فشل بعضها
const results = await Promise.allSettled([req1(), req2()]);
results.forEach(r => r.status === 'fulfilled' ? use(r.value) : log(r.reason));

// race: يأخذ أول نتيجة تصل فقط
const fastest = await Promise.race([server1(), server2()]);

وكذلك نقطة يقع فيها كثيرون وهي unhandled rejection، إذا أنشأت promise ولم تضع لها .catch أو try/catch فال Node.js سيرمي warning وفي بعض الإصدارات سيوقف العملية كليا لذلك دائما تعامل مع حالة الفشل بشكل صريح.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...