البرمجة

تنفيذ وظائف then و catch في JavaScript Promise

عند تنفيذ الشيفرة المقدمة، يتم إنشاء Promise بواسطة الدالة الرئيسية للـ Promise التي تأخذ وظيفتين كمعاملين: resolve و reject. في هذه الحالة، تم استخدام setTimeout لتأخير وظيفة الـ reject بمقدار 1000 ميلي ثانية، مما يؤدي إلى رفض الـ Promise بعد مرور هذه الفترة.

عندما يتم استدعاء الـ Promise، يتم تسجيل وظيفة الـ catch للتعامل مع الرفض الذي قد يحدث، ومن ثم وظيفة الـ then للتعامل مع النجاح في حال حدوثه.

الآن، بما أن وظيفة الـ reject قد تم استدعاؤها بعد مرور 1000 ميلي ثانية، فإن وظيفة الـ catch ستتم استدعاؤها أولاً، حيث تقوم بتسجيل “rejected” في السجل. وبعد ذلك، وظيفة الـ then تأتي لتُنفذ، وتقوم بتسجيل “success” في السجل.

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

المزيد من المعلومات

بالتأكيد، دعنا نوسع قليلاً في شرح كيفية عمل وظائف الـ then والـ catch في Promise.

عند استدعاء الـ Promise، يتم تنفيذ الوظيفة الممررة إليه كمعامل إلى الدالة الرئيسية للـ Promise، والتي تحتوي عادة على مهمة متزامنة أو مهمة تأتي متأخرة مثل استعلام إلى خادم أو تنزيل ملف. تُعد هذه المهمة معلومة عن الوعد (Promise) وهي تتوقع أن تكون مكتملة في المستقبل بنجاح أو بفشل.

في حالة حدوث نجاح للوعد، يتم استدعاء الوظيفة المرفوعة إلى then، حيث يتم تمرير القيمة التي تم حل الوعد إليها كمعامل. بمعنى آخر، يحدث هذا عندما يتم استدعاء resolve.

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

لذلك، عند استخدام وظائف then و catch معًا كما هو الحال في الشيفرة المقدمة، فإن كل منهما يُعتبر جزءًا من سلسلة من الإجراءات التي يجب اتخاذها عند حدوث الوعد. سيتم تنفيذ الوظيفة المرتبطة ب catch عند حدوث فشل الوعد، وسيتم تنفيذ الوظيفة المرتبطة ب then عند حدوث نجاح الوعد. وهذا هو السبب في أننا نرى النتيجة المطلوبة التي تظهر كلاً من “rejected” و “success” في السجل.

هذا النمط من التعامل مع الوعود يجعل من السهل كتابة الشيفرة التي تتعامل بشكل فعّال مع العمليات غير المتزامنة والتحكم في تسلسل الإجراءات بناءً على نتائج العمليات المتزامنة.

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

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

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر