إرجاع وعد جديد (وظيفة (حل ، رفض) { خطأ فار. var try = function () { إذا (الأوقات == 0) { رفض (خطأ) ؛ } آخر { fn (). ثم (حل) .catch (وظيفة (e) { مرات-؛ خطأ = هـ ؛ setTimeOut (function () {try ()} ، delay) ؛ }) ؛ } } ؛ محاولة()؛ }) ؛ } ؛
نمط #2: إعادة المحاولة حتى تلتقي الحالةإنه يحدد تأخيرًا بين إعادة المحاكاة وعدد أقصى للمحاولات.
work.publish () .Then (الوظيفة (النتيجة) { إرجاع وعد جديد (وظيفة (حل ، رفض) { var intervalid = setInterval (function () { work.requeststatus (النتيجة). التبديل (result2.status) { حالة "التقدم": استراحة ؛ // لا تفعل شيئًا حالة "النجاح": ClearInterval (الفاصل) ؛ حل (النتيجة 2) ؛ استراحة؛ حالة "الفشل": ClearInterval (الفاصل) ؛ رفض (النتيجة 2) ؛ استراحة؛ } }). } ، 1000) ؛ }) ؛ }) .Then (function () {console.log ('done')}) .catch (console.error) ؛
نمط #3: إعادة إعادة محاكمة غير محدودة مع الحالة
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();
});
};
إرجاع وعد جديد (وظيفة (حل ، رفض) {
setTimeout (refect.bind (null ، wise) ، t) ؛
}) ؛
}
var p = promise.reject () ؛
لـ (var i = 0 ؛ i var max = 5 ؛
var p = promise.reject () ؛
لـ (var i = 0 ؛ i var max = 5 ؛
var p = promise.reject () ؛
لـ (var i = 0 ؛ i الاستنتاج 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);
function rejectDelay(reason) {
return new Promise(function(resolve, reject) {
setTimeout(reject.bind(null, reason), t);
});
}
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3