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

كيفية تنفيذ أنماط تصميم إعادة المحاولة الوعدية لمعالجة الأخطاء بكفاءة؟

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

How to Implement Promise Retry Design Patterns for Efficient Error Handling?

أنماط تصميم إعادة محاولة الوعد: نهج فعال في الذاكرة

عند استخدام الوعود، إعادة محاولة العمليات في مواجهة حالات الفشل أو حتى تتوفر ظروف معينة تلبية هي حاجة مشتركة. في هذه المقالة، سوف نستكشف ثلاثة أنماط لتصميم إعادة محاولة Promise:

1. إعادة المحاولة حتى يتم حل الوعد

يستمر هذا النمط في إعادة المحاولة حتى يتم حل الوعد. يحدد الحد الأقصى لعدد مرات إعادة المحاولة والتأخير بين المحاولات.

Promise.retry = function(fn, times, delay) {
  return new Promise(function(resolve, reject) {
    var error;
    var attempt = function() {
      if (times == 0) {
        reject(error);
      } else {
        fn().then(resolve)
          .catch(function(e){
            times--;
            error = e;
            setTimeout(function(){attempt()}, delay);
          });
      }
    };
    attempt();
  });
};

2. إعادة المحاولة حتى يتم استيفاء شرط النتيجة

يُعاد هذا النمط المحاولة حتى يتم استيفاء شرط محدد في نتيجة الوعد. ويتضمن أيضًا الحد الأقصى لعدد مرات إعادة المحاولة والتأخير بين المحاولات.

work.publish()
    .then(function(result){
        return new Promise(function(resolve, reject){
            var intervalId = setInterval(function(){
                work.requestStatus(result).then(function(result2){
                    switch(result2.status) {
                        case "progress": break; //do nothing
                        case "success": clearInterval(intervalId); resolve(result2); break;
                        case "failure": clearInterval(intervalId); reject(result2); break;
                    }
                }).catch(function(error){clearInterval(intervalId); reject(error)});
            }, 1000);
        });
    })
    .then(function(){console.log('done')})
    .catch(console.error);

3. إعادة المحاولة الديناميكية ذات الكفاءة في الذاكرة

يستخدم هذا النمط أسلوبًا متكررًا، مما يوفر عدد غير محدود من عمليات إعادة المحاولة مع تأخير قابل للتكوين.

var max = 5;
var p = Promise.reject();

for(var i=0; i

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

يوفر كل من هذه الأنماط حلاً مرنًا وفعالاً لإعادة محاولة عمليات Promise. اعتمادا على متطلبات التطبيق الخاص بك، يمكنك اختيار النمط الذي يناسب احتياجاتك.

بيان الافراج أعيد طبع هذه المقالة على: 1729587326 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

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

Copyright© 2022 湘ICP备2022001581号-3