我的问题是我试图通过迭代值增加超时时间并将其时间增加1000.例如,如果增量值为5,则超时时它将为5 * 1000。
我尝试了第一种方式 - >
var textValue = 10;
function doSetTimeout(i) {
setTimeout(function() { console.log(i); }, i * 1000);
}
for(var i = 1; i <= textValue; i++){
doSetTimeout(i);
}
我也试过这个 - &gt;
var textValue = 10;
for(var i = 1; i <= textValue; i++){
(function () {
var j = i;
setTimeout(function timer() {
console.log(j);
},j*1000);
})();
}
我得到的全部是,即使每次都正确设置变量,超时总是设置为1000毫秒。
任何帮助都将不胜感激。
答案 0 :(得分:1)
超时实际上是正确的持续时间,它们只是同时开始,因为setTimeout
不会停止执行for循环。
这应该是你想要的:
var textValue = 10;
delayLoop(textValue);
function delayLoop(to, at) {
var at = at || 1;
if (at <= to) {
setTimeout(function() {
console.log(at);
delayLoop(to, at + 1);
}, 1000 * at);
}
}
答案 1 :(得分:1)
你创建了一堆setTimeout
在1000ms,2000ms,3000ms等之后被触发。问题是你同时创建它们,所以每次超时都会在下一次超时后1秒。有两种方法可以解决问题。
setTimeout
计算正确的延迟。 第一个应该是1000毫秒。第二个应该是在1000ms + 2000ms之后。第三个应该是在1000 + 2000 + 3000之后等等。
var timeoutSum = 0;
for (var i = 1000; i <= 10000; i += 1000) {
timeoutSum += i;
setTimeout(function() { console.log("hi!"); }, timeoutSum);
}
我们创建一个函数来添加一个新的超时,然后在超时结束时从被调用的函数中调用它。你可以把它想象成一个奇怪的倒置for循环,初始值在外面,条件在中间。
var wait = 1000;
function addTimeout(wait) {
setTimeout(function() {
console.log('hi');
if (wait < 10000) {
addTimeout(wait + 1000);
}
}, wait);
}
addTimeout(wait);