أنماط تصميم إعادة محاولة الوعد: نهج فعال في الذاكرة
عند استخدام الوعود، إعادة محاولة العمليات في مواجهة حالات الفشل أو حتى تتوفر ظروف معينة تلبية هي حاجة مشتركة. في هذه المقالة، سوف نستكشف ثلاثة أنماط لتصميم إعادة محاولة 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. اعتمادا على متطلبات التطبيق الخاص بك، يمكنك اختيار النمط الذي يناسب احتياجاتك.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3