JS for循环暂停与定时器

JS for循环暂停与定时器

第一种写法

使用async 将异步方法变为同步方法执行,只有返回 resolve才会触发 await向下执行。
可以实现for循环的暂停

const sleep = (timeout= 1000)=>new Promise((resolve, reject)=>{
    setTimeout(resolve, timeout);
});
// 可以使用 bluebird模块中的 bluebird.delay() 替换 sleep()
// const bluebird = ruquire('bluebird');
let timer = async(timeout) => {
    for(let i = 0; i< timeout; i++) {
        await sleep(1000);
        console.log(i+1);
    }
}
timer(10);

第二种写法

使用 setInterval()方法实现

function timer(timeout){
    let i = 0;
    let t;
    t = setInterval(time, 1000);
    function time() {
        console.log(i);
        i++;
        if(i >= timeout) clearInterval(t);
    }
}
timer(10);

第三种写法

使用 setTimeout 实现

function timer(timeout) {
    let i = 0;
    // let t;
    time();
    function time() {
        if (i < timeout) {
            console.log(i);
            i++;
            setTimeout(time, 1000);
        } else {
            return;
        }
    }
}
timer(10);
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 如果你想在JavaScript中使用循环自动点击而不使用定时器,可以使用递归函数来模拟循环。递归函数会在每个操作之间暂停一段时间,以确保每次点击都有效。 以下是一个简单的示例代码,它将在每个1秒钟的间隔内自动点击指定数量的按钮: ```javascript function autoClick(buttons, count) { if (count <= 0) return; var button = buttons.shift(); button.click(); setTimeout(function() { autoClick(buttons, count - 1); }, 1000); } var buttons = document.querySelectorAll('button'); autoClick(buttons, 10); // 自动点击10次按钮 ``` 这段代码使用了递归函数 `autoClick` 来模拟循环。该函数接受两个参数,一个是要点击的按钮数组 `buttons`,另一个是要点击的次数 `count`。 在函数的主体中,我们从按钮数组中取出第一个按钮,并模拟了一个点击事件。然后,使用 `setTimeout` 函数在1秒钟后调用 `autoClick` 函数,同时将按钮数组和剩余点击次数作为参数传递给它。 递归函数会重复执行,直到所有的点击都完成为止。请注意,我们使用了一个基本条件来确保递归函数在计数器达到零时停止。这样可以确保我们不会无限递归,从而导致浏览器崩溃或运行缓慢。 ### 回答2: 在使用JavaScript的for循环进行自动点击时,我们可以确保每一次都有效的方法如下: 首先,我们需要确保我们要执行点击的元素能够被正确地选择到。可以通过使用DOM选择器方法(如getElementById、getElementsByClassName、querySelector等)来获取需要点击的元素,并将其保存在一个变量中。 接着,在for循环中,我们可以使用click()方法来模拟点击操作。这样就能够通过JavaScript自动触发元素的点击事件。 然而,由于自动点击操作可能是瞬间完成的,如果我们不进行适当的控制,可能会导致一些问题,例如页面还没有完全载完成时进行点击操作,或者点击操作发生过快导致点击事件没有正确响应等。 为了解决这些问题,可以使用setTimeout函数进行延迟执行。这样就可以确保每一次点击操作都在合适的时机进行。 具体操作思路如下: 1. 使用相应的DOM选择器方法获取需要点击的元素,并将其保存在一个变量中。 2. 在for循环中,使用setTimeout函数来延迟执行点击操作,以保证每次点击在合适的时机进行。可以根据需要调整延迟的时间间隔。 3. 在延迟执行的回调函数中,调用元素的click()方法来触发点击事件。 通过这样的方式,我们可以保证每一次自动点击都能在合适的时机进行,并且有效地触发点击事件。 ### 回答3: 在JavaScript中,可以通过使用递归来实现循环的点击操作,而不使用定时器。 首先,我们可以定义一个函数,该函数会执行点击操作。然后,我们可以在点击操作完成后,再次调用该函数,以实现连续的点击。 具体实现步骤如下: 1. 创建一个函数,用于执行点击操作。例如,我们可以将该函数命名为"clickButton"。 ```javascript function clickButton() { // 执行点击操作 // ... // 当前点击操作完成后,再次调用clickButton函数 clickButton(); } ``` 2. 在需要进行循环点击的地方调用该函数。例如,我们可以在某个按钮的点击事件中调用该函数。 ```javascript document.getElementById('button').addEventListener('click', function() { clickButton(); }); ``` 通过这种方式,每次点击完成后都会立即再次调用clickButton函数,从而实现连续的点击操作。不使用定时器的好处是,可以避免定时器的延时问题,确保每一次点击都有效。 需要注意的是,为了避免出现无限循环的情况,我们需要在点击操作的一定条件下停止递归调用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值