Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何根据索引/迭代次数动态更改For循环中的间隔时间?_Javascript_Wait - Fatal编程技术网

Javascript 如何根据索引/迭代次数动态更改For循环中的间隔时间?

Javascript 如何根据索引/迭代次数动态更改For循环中的间隔时间?,javascript,wait,Javascript,Wait,由于我无法发表评论,我不得不写这篇文章。我得到了下面的代码,它会延迟/等待1秒或1000毫秒- 设n=5; for(设i=1;i使用递归调用而不是for循环 设i=1; 职能a(i){ 如果(i>5) 返回 其他的 b(“信息”,一) } 功能b(s、f){ setTimeout(函数计时器(){ console.log(s+“”+f+“秒”); },f*1000); a(++i); } a(i);我花了一些时间来解释你的问题xD,但这就是你想要的吗 这将持续触发console.log,每次

由于我无法发表评论,我不得不写这篇文章。我得到了下面的代码,它会延迟/等待1秒或1000毫秒-

设n=5;

for(设i=1;i使用递归调用而不是for循环

设i=1;
职能a(i){
如果(i>5)
返回
其他的
b(“信息”,一)
}
功能b(s、f){
setTimeout(函数计时器(){
console.log(s+“”+f+“秒”);
},f*1000);
a(++i);
}

a(i);
我花了一些时间来解释你的问题xD,但这就是你想要的吗

这将持续触发console.log,每次延迟i*1000。 第一次是1秒长(1*1000),下一次是2秒,依此类推

设i=0;
循环=()=>{
设置超时(()=>{
console.log(new Date());//为了清楚起见
i++;
如果(i<10){
loop();
}
},i*1000)
};

loop();
循环不会等待超时函数完成。 因此,当循环运行时,它会为每个索引安排警报

你可以使用一个功能,它将根据你的索引运行,但同时安排。你可以感受到3秒的差异

function test(i){
    setTimeout( function timer(){
        console.log("hello world" + i);
    }, i*3000);
}
for (let i=1; i<4; i++) {
   test(i);
}
功能测试(一){
setTimeout(函数计时器(){
console.log(“你好世界”+i);
},i*3000);
}

对于(让i=1;i),您可以尝试使用async/await(Promissions)来序列化代码:

const waitSeconds=seconds=>newpromise(解析=>setTimeout(解析,秒))
异步函数main(){
让oldDate=新日期()
让我们约会吧
/* 
*如果将“wait”放在循环中,则可以同步异步代码,并进行模拟
*睡眠功能
*/

对于(让i=1;i这里有一个函数,它将立即显示,然后是1秒之后,然后是2秒之后,然后是3秒之后,等等。无需特殊数学,无需承诺

常数n=5;
设cnt=0;
函数show(){
log(“call”+cnt,“delay:”,cnt,“sec”);
cnt++;
如果(cnt>n)返回;//我们完成了
setTimeout(显示,cnt*1000);//cnt秒后
}

show()

所以你想要超时的顺序是:1s,前一个+2s,前一个+3s,依此类推。这个顺序是:1,3,6,10,15…它的公式是
a[n]=n*(n+1)/2

设n=6;
log(newdate().getSeconds());
for(设i=1;i}
那么你想做9个计时器?如果是这样,那么你的代码将按照你的要求执行。它不会等待3秒钟。事实上,计时器永远不会精确。你的问题毫无意义,只是在代码笔中尝试了一下你的代码:你会收到9条间隔3000毫秒的消息-如果这不是你想要的(但从你的问题听起来确实如此),请指定预期结果。首先,您似乎不了解setTimeout的工作原理-它不是“延迟”.现在,您将在3秒钟内收到警报,因为您已经将3000乘以
i
-如果您不这样做,那么您将同时收到所有警报。编辑问题以使您的最后一句加粗并不能真正帮助您解决问题。现在有多个评论员告诉您至少,您的代码已经完成了您的要求(或者更确切地说,如果这不是您预期的结果,那么您实际上要求的内容并不十分清楚)。例如,如果n=5,则我希望循环在第一次迭代中延迟1秒。在第二次迭代中延迟2秒,依此类推。。最终延迟将为5秒。是的,这将在第一次迭代中延迟1秒,在第二次迭代中延迟2秒,依此类推,请尝试。您的描述与代码不匹配。但它确实起作用。例如,如果n=5,则我希望循环延迟1秒第1次迭代的秒数。第2次迭代的秒数,依此类推。最后的延迟将为5秒。数学家仍然活着!!:)非常抱歉,我错过了你的答案,有这么多的评论、误解和答案……无论如何,我选择你的答案,因为你是第一个解决了我的问题的人,谢谢你的时间,先生。@Mike Lol。其他的解决方案本身都很有用,所以感谢acceptPavan在ES6语法中是一样的。更难阅读,但是事实上是一样的。他的编辑是在我写我的时候做的:)