J'essaie de créer un compteur qui se met à jour toutes les secondes. J'ai fait une fonction backend qui revient toutes les 30 secondes, qui est appelée avec Ajax. Le résultat de l'appel est divisé par 30 et devrait alors mettre à jour le compteur toutes les secondes pendant 30 secondes. Comment pourrais-je faire pour dormir dans la boucle for?Dormez dans javascript for-loop
Ceci est mon code à ce jour:
function getCount() {
$.ajax({
url: '@Url.Action("", "", new {area = ""})',
type: 'POST',
success: function (data) {
var newTotalCount = data.totalCount;
var newDanishCount = data.danishCount;
var newNorwayCount = data.norwayCount;
var newSwedenCount = data.swedenCount;
var newUsCount = data.usCount;
var currentTotalCount = $("#odoTotal").text().replace(/,/g, "").replace(/(\r\n|\n|\r)/gm, "");
var currentDanishCount = $("#odoDk").text().replace(/,/g, "").replace(/(\r\n|\n|\r)/gm, "");
var currentNorwayCount = $("#odoNo").text().replace(/,/g, "").replace(/(\r\n|\n|\r)/gm, "");
var currentSwedenCount = $("#odoSe").text().replace(/,/g, "").replace(/(\r\n|\n|\r)/gm, "");
var currentUsCount = $("#odoUs").text().replace(/,/g, "").replace(/(\r\n|\n|\r)/gm, "");
var updateTotalCount = newTotalCount - currentTotalCount;
var updateDanishCount = newDanishCount - currentDanishCount;
var updateNorwayCount = newNorwayCount - currentNorwayCount;
var updateSwedenCount = newSwedenCount - currentSwedenCount;
var updateUsCount = newUsCount - currentUsCount;
var updateTotalPerSecond = updateTotalCount/30;
var updateDanishPerSecond = updateDanishCount/30;
var updateNorwayPerSecond = updateNorwayCount/30;
var updateSwedenPerSecond = updateSwedenCount/30;
var updateUsPerSecond = updateUsCount/30;
getAllSales();
for (var i = 0; i < 30; i++) {
window.setTimeout(function() {
$("#odoTotal").html(currentTotalCount+updateTotalPerSecond);
$("#odoDk").html(currentDanishCount+updateDanishPerSecond);
$("#odoNo").html(currentNorwayCount+updateNorwayPerSecond);
$("#odoSe").html(currentSwedenCount+updateSwedenPerSecond);
$("#odoUs").html(currentUsCount+updateUsPerSecond);
currentTotalCount = $("#odoTotal").text().replace(/,/g, "").replace(/(\r\n|\n|\r)/gm, "");
currentDanishCount = $("#odoDk").text().replace(/,/g, "").replace(/(\r\n|\n|\r)/gm, "");
currentNorwayCount = $("#odoNo").text().replace(/,/g, "").replace(/(\r\n|\n|\r)/gm, "");
currentSwedenCount = $("#odoSe").text().replace(/,/g, "").replace(/(\r\n|\n|\r)/gm, "");
currentUsCount = $("#odoUs").text().replace(/,/g, "").replace(/(\r\n|\n|\r)/gm, "");
}, 1000);
}
}
});
}
Je regarde RxJS, il est un excellent outil pour le traitement des cas comme ceux-ci async. Cela pourrait être une exagération, cependant. –
Copie possible de [Comment ajouter un délai dans une boucle JavaScript?] (Http://stackoverflow.com/questions/3583724/how-do-i-add-a-delay-in-a-javascript-loop) – Rajesh
solution simple mais finalement stupide - changer le délai de '1000' à' (i + 1) * 1000' –