2014-09-09 2 views
0

В настоящее время я играю с API LastFM и пытаюсь обновить список недавно воспроизведенных треков, когда я воспроизвожу треки через Spotify и ITunes. У меня есть начальный код, работающий через комбинацию JS и Handlebars, так что статический список треков загружается при загрузке страницы, который является текущим во время загрузки страницы.setInterval функция только работает один раз

Однако я хочу, чтобы список обновлялся, когда я выбираю новый трек, не обновляя страницу. Поэтому я думал, что могу просто использовать функцию 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); 

ответ

0

Вы не должны вызывать функцию в setInterval. Он нуждается в обратном вызове.

Say как пыльник

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

Вы работаете console.log("test") немедленно. Попробуйте инкапсулировать это в функцию пыльника, но не создавайте его, включив в него скобки ().

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

Вы использовали вызов функции вместо ссылки на функцию как первый параметр setInterval. Делают это так:

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

    intervalID= window.setInterval(test, 1000); 

или вы можете сделать это также:

intervalID= window.setInterval(function() { 
     console.log("test!"); 
    }, 1000); 
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

+0

ссылка: http://stackoverflow.com/questions/14022565/settimeout-vs-setinterval-in-javascript –

Смежные вопросы