Javascript 使用JS设置循环每次迭代的延迟
我正在尝试创建一个非常简单的倒计时。 当有人点击“随机挑选赢家”时,它会执行selectWinner() 我一直在试图找出如何在3,2,1之间稍微延迟执行循环。出于某种原因,无论我将setTimeout或setInterval放在何处,它都会在整个循环之后继续执行它 有什么建议吗Javascript 使用JS设置循环每次迭代的延迟,javascript,loops,delay,Javascript,Loops,Delay,我正在尝试创建一个非常简单的倒计时。 当有人点击“随机挑选赢家”时,它会执行selectWinner() 我一直在试图找出如何在3,2,1之间稍微延迟执行循环。出于某种原因,无论我将setTimeout或setInterval放在何处,它都会在整个循环之后继续执行它 有什么建议吗 // Picking name from sorting hat const randomNumber = function () { winningNumber = Math.trunc(Math.rando
// Picking name from sorting hat
const randomNumber = function () {
winningNumber = Math.trunc(Math.random() * winners.length) + 1;
}
function selectWinner() {
for (let i = 3; i < 4; i--) {
if (i == 0) {
return;
} else {
setInterval(() => console.log(i), 500);
}
}
}
//从分类帽中选取名称
常量随机数=函数(){
winningNumber=Math.trunc(Math.random()*winners.length)+1;
}
函数selectWinner(){
for(设i=3;i<4;i--){
如果(i==0){
回来
}否则{
setInterval(()=>console.log(i),500);
}
}
}
您的方法存在的问题:
或任何其他循环机制都是同步的,不会等待的
将在每次滴答声时运行该函数。因此,如果您在每次迭代中添加它,您将添加多个间隔setInterval
- 每当使用
时,请接受计时器参考,以便将来在需要时将其关闭setInterval
您可以尝试以下方法:
- 使用递归来创建循环
- 由于您可以控制何时调用该函数,因此可以在此处添加延迟
设置超时的示例
let count=3
函数决战(){
如果(计数){
设置超时(()=>{
console.log(计数--);
摊牌();
}, 1000)
}否则{
设置超时(()=>{
console.log('获胜者是…')
}, 1000)
}
}
摊牌()代码>这就是你想要的吗
function selectWinner() {
for (let i = 3, x = 1; i >= 0; i--, x++) {
setTimeout(() => {
if (i !== 0) {
console.log(i);
} else {
console.log('and the winner is...');
}
}, 500 * x)
}
}
发生的情况是,每次调用setTimeout/setInterval时,它都会将延迟后发生的事情排队等待。但您的主代码仍在运行
e、 g
这将输出1,然后输出3,延迟后,将输出2。Javascript不会停止一切等待setTimeout的发生,它会继续执行其他任务
有两种方法可以让你实现你想要做的事情。最基本的选择(我向您推荐)就是不要使用for循环,而是让setInterval像for循环一样工作(意思是,让interval为您执行循环)。下面是一个工作示例:
函数倒计时(){
设i=4
常量间隔=设置间隔(()=>{
我--;
控制台日志(i)
如果(i==0){
清除间隔(间隔)
}
}, 500)
}
倒计时()
Sory。我没有注意到它是设定间隔。我修好了。它仍然不能正常工作。请注意编辑器中的
图标。您可以使用它制作一个代码段。还有,这是你想要的吗?这不是一种解释。请解释你改变的原因和原因。所以,不需要向任何人道歉。我们都会犯错误
console.log(1)
setTimeout(() => console.log(2), 100)
console.log(3)