2014-09-09 2 views
0

현재 LastFM API를 사용 중이며 Spotify 및 iTunes를 통해 트랙을 재생할 때 최근에 재생 된 트랙 목록을 업데이트하려고합니다. JS와 Handlebars의 조합을 통해 작동하는 초기 코드가있어 트랙의 정적 목록이 페이지로드시 현재 페이지로드에로드됩니다.setInterval 함수가 한 번만 실행됩니다.

그러나 페이지를 새로 고치지 않고 새 트랙을 선택하면 목록이 업데이트되기를 원합니다. 그래서 난 그냥 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); 

답변

0

setInterval에서 함수를 호출하면 안됩니다. 콜백이 필요합니다.

는 우는 소리

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

당신은 즉시 console.log("test")을 실행하는 것처럼 말. 이것을 anther 함수로 캡슐화 해보지 만, 괄호 ()을 포함시켜 인스턴스화하지 마십시오.

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

setInterval의 첫 번째 매개 변수로 함수 참조 대신 함수 호출을 사용했습니다.

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

    intervalID= window.setInterval(test, 1000); 

또는 당신은 또한이 작업을 수행 할 수 있습니다 :이처럼 수행의 setTimeout을 포함하는 함수를 사용하고 함수 내에서 호출 :

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

나는에서는 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 –

관련 문제