[英]Sleep in javascript for-loop
我正在尝试创建一个计数器,该计数器每1秒更新一次。 我制作了一个后端函数,该函数每30秒返回一次,这用Ajax调用。 呼叫结果除以30,然后应每1秒更新一次计数器,持续30秒。 我将如何进行循环睡眠?
到目前为止,这是我的代码:
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);
}
}
});
}
我为此找到了解决方案
首先创建一个变量,您将要增加
var x = 0;
然后创建一个间隔,该间隔将在一段时间(例如5秒)后执行您想要的操作,这也会在每次运行时增加您的值x
var interval = setInterval(function() {
if (x >= 5) { // just change 5 to 30
console.log('Loop timeout ended');
return clearInterval(interval);
}
// do what ever you want
console.log('Current x: '+x);
x++;
}, 5000);
示例功能
function runTimeoutLoop(){
var x = 0;
var interval = setInterval(function() {
if (x >= 5) { // just change 5 to 30
console.log('Loop timeout ended');
return clearInterval(interval);
}
// do what ever you want
console.log('Current x: '+x);
x++;
}, 5000);
}
如果您使用Firefox 53+或babel,则可以使用ES2017:
async function promiseTimeout(milliseconds) {
await new Promise(resolve => setTimeout(()=>resolve(), milliseconds))
}
async function countDown(from) {
while (from) {
console.log(from--, 'seconds left');
await promiseTimeout(1000);
}
alert('countdown done');
}
countDown(10);
这是通天塔。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.