【问题标题】:setInterval function only running oncesetInterval 函数只运行一次
【发布时间】:2014-09-09 15:04:29
【问题描述】:

我目前正在使用 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);

【问题讨论】:

    标签: javascript setinterval


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      像下面这样说

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        【解决方案4】:

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

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

        或者你也可以这样做:

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

        【讨论】:

          猜你喜欢
          • 2013-11-13
          • 2012-04-01
          • 1970-01-01
          • 1970-01-01
          • 2013-01-08
          • 2011-09-05
          • 1970-01-01
          • 2012-08-23
          • 1970-01-01
          相关资源
          最近更新 更多