setInterval函数只运行一次

时间:2014-09-09 15:04:29

标签: javascript setinterval

我正在玩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);

4 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

跟贝拉说话一样

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

答案 2 :(得分:0)

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

function test() {
  console.log("test");
}

   intervalID= window.setInterval(test, 1000);

或者您也可以这样做:

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

答案 3 :(得分:0)

我建议使用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