我正在使用setInterval(fname,10000);在JavaScript中每10秒调用一个函数。有可能在某个事件中停止调用它吗?

我希望用户能够停止重复刷新数据。


当前回答

setInterval()返回一个间隔ID,您可以将其传递给clearInterval(

var refreshIntervalId = setInterval(fname, 10000);

/* later */
clearInterval(refreshIntervalId);

请参阅setInterval()和clearInterval(()的文档。

其他回答

您可以设置一个新变量,并让它在每次运行时递增++(加1),然后我使用一个条件语句结束它:

var intervalId = null;
var varCounter = 0;
var varName = function(){
     if(varCounter <= 10) {
          varCounter++;
          /* your code goes here */
     } else {
          clearInterval(intervalId);
     }
};

$(document).ready(function(){
     intervalId = setInterval(varName, 10000);
});

我希望这会有所帮助,而且是正确的。

已回答。。。但如果您需要一个功能强大、可重复使用的计时器,它还支持不同时间间隔的多个任务,您可以使用我的TaskTimer(用于节点和浏览器)。

// Timer with 1000ms (1 second) base interval resolution.
const timer = new TaskTimer(1000);

// Add task(s) based on tick intervals.
timer.add({
    id: 'job1',         // unique id of the task
    tickInterval: 5,    // run every 5 ticks (5 x interval = 5000 ms)
    totalRuns: 10,      // run 10 times only. (omit for unlimited times)
    callback(task) {
        // code to be executed on each run
        console.log(task.name + ' task has run ' + task.currentRuns + ' times.');
        // stop the timer anytime you like
        if (someCondition()) timer.stop();
        // or simply remove this task if you have others
        if (someCondition()) timer.remove(task.id);
    }
});

// Start the timer
timer.start();

在您的情况下,当用户单击以干扰数据刷新时;如果需要重新启用,也可以调用timer.pause(),然后调用timer.resume()。

在此处查看更多信息。

setInterval()返回一个间隔ID,您可以将其传递给clearInterval(

var refreshIntervalId = setInterval(fname, 10000);

/* later */
clearInterval(refreshIntervalId);

请参阅setInterval()和clearInterval(()的文档。

诀窍

setInterval返回一个数字:

解决方案

记下这个号码。将其传递给函数clearInterval,您就安全了:

代码:

始终将返回的setInterval数存储在变量中,以便以后可以停止该间隔:

const intervalID = setInterval(f, 1000);

// Some code

clearInterval(intervalID);

(将此数字视为setInterval的ID。即使您调用了许多setInterval,也可以使用正确的ID来停止其中的任何一个。)

在nodeJS中,可以在setInterval函数中使用“this”特殊关键字。

您可以使用this this关键字来clearInterval,下面是一个示例:

setInterval(
    function clear() {
            clearInterval(this) 
       return clear;
    }()
, 1000)

当您在函数中打印此特殊关键字的值时,将输出Timeout对象Timeout{…}