setInterval()只运行一次函数

Jam*_*son 7 javascript setinterval

我想定期查询PHP脚本以获取新消息.为此,我使用了setInterval()函数和AJAX.

$(document).ready(function(){

    var queryInterval = 1000; /* How fast we query for new messages */

    setInterval(getMessages(), queryInterval);

    function getMessages() {
        console.log("tick");
    }

});
Run Code Online (Sandbox Code Playgroud)

但是,当我查看Javascript控制台时,我只看到"滴答"一次.我确保控制台不会再忽略相同字符串的日志,所以如果代码工作正常,它应该每秒在控制台中显示"tick".

谁知道这里可能出现什么问题?

qwe*_*ymk 24

更改:

setInterval(getMessages(), queryInterval);
Run Code Online (Sandbox Code Playgroud)

至:

setInterval(getMessages, queryInterval);
Run Code Online (Sandbox Code Playgroud)

  • @JamilHneini也这样做:`setInterval(function(){getMessages(arg)},queryInterval);` (2认同)

Way*_*ett 9

实际上,setInterval根本没有运行getMessages(甚至没有运行).setInterval期望对函数的引用,但是您正在立即执行该getMessages函数并将其返回值传递给(即).这就是后来的事情.setIntervalundefinedgetMessage

传递这样的引用setInterval:

setInterval(getMessages, queryInterval);
Run Code Online (Sandbox Code Playgroud)

如果这是唯一使用的地方getMessages,那么你也可以像这样写:

setInterval(function() {
    console.log("tick");
}, queryInterval);
Run Code Online (Sandbox Code Playgroud)