يقول مؤلف المذكرة ، التي ننشر ترجمتها اليوم ، إنه بالكاد امتنع عن عدم تسميتها "أخيرًا - الفرصة التي كان الجميع ينتظرونها" ، أو يمزحون بطريقة ما حول هذا الموضوع. في النهاية ، قرر الاستغناء عن النكات والتحدث فقط عن الميزة المهمة والمفيدة حقًا لأشياء الوعد.
إذا كنت قد بدأت للتو في تعلم جافا سكريبت ولم تكن على دراية بالوعود (أحيانًا يطلق عليها "الوعود" و "النتائج الموعودة" و "كائنات الوعد") ، فقد تكون مهتمًا بمنشوراتنا السابقة حول هذا الموضوع:
→
وعود في ES6: الأنماط والأنماط المضادة←
JavaScript: طرق البرمجة غير المتزامنة←
JavaScript ES8 والانتقال إلى غير متزامن / انتظار→
متزامن / انتظار: 6 أسباب لنسيان الوعود→
الهروب من الجحيم غير متزامن / انتظار←
JavaScript ES6: اكتب أقل - افعل المزيد→
دليل الوعود لأولئك الذين يريدون فرزها→
تصميم جافا سكريبت غير المتزامن / انتظار: نقاط القوة والمزالق وأنماط الاستخدام→
استخدام الوعود في JavaScriptPromise.prototype.finally الطريقة
البند
25.6.5.3 من معيار ECMAScript 2018 مخصص
لطريقة Promise.prototype.finally وفقًا لموقع
caniuse.com ، فإن مستوى الدعم لهذه الطريقة هو تقريبًا 81٪. يمكن استخدام هذه الطريقة أيضًا في Node.js.
طريقة الوعد الأخيرة هي واحدة من أهم الابتكارات للمعيار ، والتي تسمح لك بتحديد وظيفة سيتم تنفيذها بغض النظر عن نتيجة الوعد. سيتم تنفيذ هذه الوظيفة إذا تم حل الوعد بنجاح وإذا تم رفضه.
فكر في مثال:
const myPromise = new Promise((resolve, reject) => { setTimeout(() => { resolve('success!!!'); }, 2000); });
هذا وعد شائع تمامًا يتم حله بعد 2000 مللي ثانية. إذا احتجنا بعد ذلك إلى تنفيذ بعض الإجراءات ، فسنحتاج إلى حظر:
myPromise.then( result => { console.log(result) }, failMessage => { console.log(failMessage) } );
يتم تمرير دالتين مجهولتين إلى الطريقة
then
. سيتم تنفيذ الأول إذا تم حل الوعد بنجاح. والثاني هو عندما يتم رفضه. وعدنا يكتمل دائمًا بنجاح ، سيتم عرض رسالة
success!!!
دائمًا في وحدة التحكم
success!!!
. كل هذا جيد جدا ، ولكن ماذا لو كان من الضروري تنفيذ إجراءات معينة بعد رفض الوعد ، وبعد الانتهاء الناجح من عملها؟ هنا ستساعدنا الطريقة الأخيرة:
const myPromise = new Promise((resolve, reject) => { setTimeout(() => { resolve('success!!!'); }, 2000); }); myPromise.then( result => { console.log(result) }, failMessage => { console.log(failMessage) } ).finally(finallyMessage => { console.log('FINALLY!!')});
بغض النظر عن كيفية إتمام الوعد لعمله ، بالإضافة إلى الرسالة المقابلة ، فإن النص
FINALLY!!
، والتي تخبرنا أن وظيفة رد الاتصال التي تم تمريرها إلى الطريقة الأخيرة تعمل على أي حال. من أجل التحقق من ذلك - يمكنك
التجربة .
الملخص
تشير حقيقة ظهور طريقة Promise.prototype.finally في ES2018 إلى أنه في المستقبل المنظور يمكننا توقع مستوى عال جدًا من دعم المتصفح. هذا يعني أن ما كان عليك في السابق استخدام الأدوات المساعدة التي أنشأها مطورو الطرف الثالث يمكن الآن تنفيذه باستخدام الأدوات القياسية.
في أي الحالات يمكن أن تكون طريقة
Promise.prototype.finally
مفيدة؟ على سبيل المثال ، إذا قمت بتشغيل الوعد المستخدم لتنزيل شيء ما ، بدأت بعض الرسوم المتحركة في اللعب ، وفي
finally
يمكنك إكمال هذا الرسم المتحرك. في الكتلة الأخيرة ، يمكنك ، على سبيل المثال ، إغلاق نافذة مشروطة معينة. في الواقع ، هناك العديد من المواقف التي قد تكون الطريقة الأخيرة مفيدة.
أعزائي القراء! هل استخدمت بدائل لطريقة الوعود أخيرًا قبل تنفيذها القياسي؟
