تاريخ النشر: 17 كانون الثاني (يناير) 2025
قد يكون من الصعب تنفيذ مهام غير متزامنة على الويب، ويتضمن الكثير من الإجراءات التي يتم تنفيذها على الويب مهامًا غير متزامنة. سواء كان ذلك يتضمن طلبات fetch
أو عمليات غير متزامنة أخرى، تسهِّل المتصفّحات طريقة تنفيذ هذه المهام عندما توفّر الطُرق المضمّنة معالجة فعّالة للأخطاء. سبق أن تم توفير هذا الإجراء لـ Promises باستخدام الطرق then
وcatch
وfinally
.
ومع ذلك، يجب أن تكون طريقة تصميم قاعدة بيانات تطبيقك مرنة، وليس كل ما ستفعله في تطبيقك غير متزامن بالضرورة. قد تحتاج أحيانًا إلى معالجة نتيجة طلب معاودة الاتصال بطريقة أبسط إذا لم يكن مهمًا ما إذا كان طلب معاودة الاتصال الذي تم تمريره إلى Promise
متزامنًا أم لا. Promise.try
هي طريقة متاحة الآن في جميع محركات المتصفّحات الرئيسية التي تبسّط ذلك للمطوّرين، ما يعني أنّها أصبحت الآن متاحة في Baseline.
ما هو Promise.try
وكيف يعمل؟
Promise.try
هي طريقة تسهيل تجعل التعامل مع الأخطاء في دوالّ ردّ الاتصال المتزامنة أسهل من استخدام Promise.resolve
:
// If the callback is synchronous and it throws
// an exception, the error won't be caught here:
new Promise(resolve => resolve(callback());
// But it will be here:
Promise.try(callback);
بعد ذلك، استخدِم الطرق then
وcatch
وfinally
لحلّ Promise
أو رفضه:
Promise.try(callback)
.then(result => console.log(result))
.catch(error => console.log(error))
.finally(() => console.log("All settled."));
ماذا لو كانت دالة ردّ الاتصال تحتوي على وسيطات؟ يمكنك إجراء ذلك بطريقتَين:
// This creates an extra closure, but works:
Promise.try(() => callback(param1, param2));
// This doesn't create an extra closure, and still works:
Promise.try(callback, param1, param2);
تتمثل الفائدة الأساسية لاستخدام Promise.try
في أنّه يتيح لك استخدام وعد الأداء بشكل موحّد بغض النظر عمّا إذا كان الإجراء الذي يتم تمريره إليه متزامنًا أو غير متزامن. وهذا يعني أنّه في حال استخدام وظيفة مساعدة تُرسل طلبات استدعاء إلى Promise
يتم استخدامها على نطاق واسع في رمزك البرمجي، يضمن استخدام Promise.try
معالجة الأخطاء بشكلٍ سليم لأي طلب استدعاء يتم تمريره إليه. للحصول على معلومات إضافية ومخاوف أو حالات استخدام محتملة أخرى، يمكنك الرجوع إلى مستندات MDN حول Promise.try
.
الخاتمة
بعد أن وصل الإصدار Promise.try
إلى الإصدار الأساسي "متاح حديثًا"، من المفترض أن يكون بإمكانك استخدامه في جميع محرّكات المتصفّحات الرئيسية. مع مرور الوقت، من المفترض أن تتمكّن من استخدام Promise.try
في تطبيقات الويب مع زيادة الثقة بأنّه سيكون جزءًا ثابتًا وقابلاً للتشغيل التفاعلي من منصة الويب.