Modèles de conception de tentatives de promesse : une approche efficace en matière de mémoire
Lors de l'utilisation de promesses, réessayer les opérations en cas d'échec ou jusqu'à ce que certaines conditions soient remplies satisfait est un besoin commun. Dans cet article, nous explorerons trois modèles de conception de nouvelles tentatives de promesse :
1. Réessayez jusqu'à ce que la promesse soit résolue
Ce modèle continue de réessayer jusqu'à ce que la promesse soit résolue. Il spécifie un nombre maximum de tentatives et un délai entre les tentatives.
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. Réessayer jusqu'à ce que la condition du résultat soit remplie
Ce modèle réessaye jusqu'à ce qu'une condition spécifiée soit remplie sur le résultat de la promesse. Il inclut également un nombre maximum de tentatives et un délai entre les tentatives.
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. Nouvelle tentative dynamique économe en mémoire
Ce modèle utilise une approche récursive, offrant des tentatives illimitées avec un délai configurable.
var max = 5;
var p = Promise.reject();
for(var i=0; iEn créant une chaîne .catch(), ce modèle permet des implémentations concises de nouvelles tentatives, en particulier dans les scénarios avec un faible nombre maximum de tentatives ou des tests synchrones.
Chacun de ces modèles fournit une solution flexible et efficace pour réessayer les opérations Promise. En fonction des exigences de votre application, vous pouvez choisir le modèle qui correspond le mieux à vos besoins.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3