簡體   English   中英

setInterval函數僅運行一次

[英]setInterval function only running once

我目前正在使用LastFM API,並試圖獲取最近播放的曲目列表,以便在通過Spotify和iTunes播放曲目時進行更新。 我已經通過JS和Handlebars的結合使用了初始代碼,以便在頁面加載時加載靜態的軌道列表,這是在頁面加載時最新的。

但是,我希望列表在我選擇新曲目時更新而不刷新頁面。 所以我以為我可以每5秒左右使用setInterval函數調用我的原始函數。 但是由於某種原因,我的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);

您將函數調用而不是函數引用用作setInterval的第一個參數。 像這樣做:

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

   intervalID= window.setInterval(test, 1000);

或者您也可以這樣做:

   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小提琴

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM