Je consomme une API qui renvoie du JSON, et sur cette page, j'ai une barre de progression indiquant les différentes étapes de la mise en place de quelque chose à la demande de l'utilisateur. Chaque callback de réussite d'une requête AJAX déclenche la requête suivante, car elles doivent être effectuées en séquence. Une étape lance une tâche d'arrière-plan côté serveur et le point de terminaison renvoie un ID de transaction.
En dehors de ce flux, il existe une fonction qui vérifie un autre point de terminaison pour voir si cette transaction est terminée ou non. Si elle est "en attente", je dois réémettre la demande après un petit délai.
Je l'ai fait fonctionner avec une fonction récursive :
function checkTransaction(trxid) {
window.profileTrx[trxid] = 0;
trxurl = 'https://example.com/transaction/'+trxid;
$.getJSON(trxurl,function(result) {
if(result.status === 'pending') {
setTimeout(function () {
checkTransaction(trxid);
},3000);
} else {
window.profileTrx[trxid] = result;
}
});
}
La raison pour laquelle j'utilisais window est que je pouvais accéder à la transaction par son ID dans le callback d'où elle provenait - un bon cas d'utilisation pour une promesse s'il en existe un. Mais c'est devenu compliqué, et mon manque d'expérience a commencé à me gêner. En bouclant sur l'état de window.profileTrx[trxid]
semblait être un travail double, et ne se comportait pas comme prévu, bouclant trop rapidement et faisant planter la page. Encore une fois, une promesse avec l'étape suivante dans .then()
était mon idée, mais je n'arrive pas à trouver comment.
Comment pourrais-je implémenter cela avec des promesses de sorte que la fonction de rappel qui a initié le "contrôle de transaction" récursif ne poursuive le reste de son exécution qu'une fois que l'API renvoie une réponse non suspensive au contrôle ?
Je pouvais me faire à l'idée de récurer et de rendre une promesse, mais pas les deux à la fois. Toute aide est la bienvenue.