Javascript - 告诉setInterval只能触发x次?

Pro*_*cop 59 javascript

是否可以限制setInterval在javascript中触发的次数?

Dan*_*llo 143

您可以clearInterval()x调用后调用:

var x = 0;
var intervalID = setInterval(function () {

   // Your logic here

   if (++x === 5) {
       window.clearInterval(intervalID);
   }
}, 1000);
Run Code Online (Sandbox Code Playgroud)

为避免全局变量,上述改进将是:

function setIntervalX(callback, delay, repetitions) {
    var x = 0;
    var intervalID = window.setInterval(function () {

       callback();

       if (++x === repetitions) {
           window.clearInterval(intervalID);
       }
    }, delay);
}
Run Code Online (Sandbox Code Playgroud)

然后你可以setInvervalX()按如下方式调用新函数:

// This will be repeated 5 times with 1 second intervals:
setIntervalX(function () {
    // Your logic here
}, 1000, 5);
Run Code Online (Sandbox Code Playgroud)


NDa*_*vis 12

我个人更喜欢使用setTimeout()spaced out 来达到同样的效果

// Set a function to run every "interval" seconds a total of "x" times
var x = 10;
var interval = 1000;

for (var i = 0; i < x; i++) {
    setTimeout(function () {
        // Do Something
    }, i * interval)
}
Run Code Online (Sandbox Code Playgroud)

无需清理clearInterval()

您可以将其封闭起来以避免变量泄漏,而且它看起来非常干净:)

// Definition
function setIntervalLimited(callback, interval, x) {

    for (var i = 0; i < x; i++) {
        setTimeout(callback, i * interval);
    }

}

// Usage
setIntervalLimited(function() {
    console.log('hit');          // => hit...hit...etc (every second, stops after 10)
}, 1000, 10)
Run Code Online (Sandbox Code Playgroud)


blo*_*low 7

您可以设置调用的超时时间clearInterval。这应该有效:

function setTimedInterval(callback, delay, timeout){
    var id=window.setInterval(callback, delay);
    window.setTimeout(function(){
        window.clearInterval(id);
    }, timeout);
}
Run Code Online (Sandbox Code Playgroud)

  • 哇,13 秒后我的回答几乎*相同*。怪异的。 (2认同)