setInterval函数只运行一次

setInterval function only running once

本文关键字:一次 函数 运行 setInterval      更新时间:2023-09-26

我目前正在使用LastFM API,并试图在通过Spotify和ITunes播放曲目时更新最近播放的曲目列表。我已经通过JS和Handlebars的组合获得了初始代码,以便在页面加载时加载一个静态的曲目列表,该列表是页面加载时的当前曲目。

但是,我希望在不刷新页面的情况下选择新曲目时更新列表。所以我想我可以使用setInterval函数每隔5秒左右调用一次我原来的函数。然而,由于某种原因,我的setInterval功能在页面加载时只运行一次。

我知道这是一个非常简单的错误,但我不知道为什么?帮助

var clientname = {};
clientname.website = (function(){
    var
    initPlugins = function(){
        var setupLastFM = (function(){
            /* Create a cache object */
            var cache = new LastFMCache(),
            /* Create a LastFM object */
            lastfm = new LastFM({
                apiKey    : '6db1989bd348bf91797bad802c6645d8',
                apiSecret : '155270f02728b1936ed7699e9f7b8de9',
                cache     : cache
            }),
            attachTemplate = function(data, handlebarsTemplateID){
                var template = Handlebars.compile(handlebarsTemplateID.html());
                $(".container").append(template(data));
            }
            /* Load some artist info. */
        lastfm.user.getRecentTracks({user: 'jimmersjukebox'}, {
            success: function(data){
                var trackData = data.recenttracks.track,
                    tracks = $.map(trackData, function(track) {
                        if(track['@attr']){
                            var isCurrentTrack = true;
                        }
                        return {
                            currenttrack: isCurrentTrack,
                            song: track.name,
                            artist: track.artist['#text']
                        };
                    });
                attachTemplate(tracks, $("#trackInfo"));
            }, error: function(code, message){
        }}),
        intervalID = window.setInterval(console.log("test"), 1000);
    }());
}
return{
    init: function(){
        initPlugins();
    }
};
})();
$(window).load(clientname.website.init);

您正在立即运行console.log("test")。尝试将其封装在另一个函数中,但不要通过包含括号()来实例化它。

intervalID = window.setInterval(function(){
    console.log("test");
}, 1000);

您不应该调用setInterval中的函数。它需要回调。

像下面的一样说话

intervalID = window.setInterval(function(){
   console.log("test");
}, 1000);

我建议使用setTimeout:使用一个函数来包含setTimeout,并在函数中调用它:

$(function() {
var current = $('#counter').text();
var endvalue = 50;
function timeoutVersion() {
    if (current === endvalue) {return false;} else {
        current++;
        $('#counter').text(current);
    }
    setTimeout(timeoutVersion, 50);
}
$('a').click(function() {
    timeoutVersion();
})

})​

JS Fiddle

您使用了函数调用而不是函数引用作为setInterval的第一个参数。这样做:

function test() {
  console.log("test");
}
   intervalID= window.setInterval(test, 1000);

或者你也可以这样做:

   intervalID= window.setInterval( function() {
      console.log("test!");
    }, 1000);