setInterval函数只运行一次
setInterval function only running once
我目前正在使用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);
您正在立即运行console.log("test")
。尝试将其封装在另一个函数中,但不要通过包含括号()
来实例化它。
intervalID = window.setInterval(function(){
console.log("test");
}, 1000);
您不应该调用setInterval中的函数。它需要回调。
像下面的一样说话
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 Fiddle
您使用了函数调用而不是函数引用作为setInterval的第一个参数。这样做:
function test() {
console.log("test");
}
intervalID= window.setInterval(test, 1000);
或者你也可以这样做:
intervalID= window.setInterval( function() {
console.log("test!");
}, 1000);
相关文章:
- 使用每500ms运行一次的jquery函数是个好主意吗
- Javascript函数,需要每隔30秒递减一次
- 当元素可见时,jQuery滚动函数会触发一次
- 使函数只运行一次(Javascript)
- 如何在Javascript中设置函数在上一次结束时启动
- 运行“;非“;单击另一个函数中的函数仅一次
- 角函数每秒钟增加一次
- JavaScript只有在最后一次被调用时才运行函数
- 如何只使用一次window.onload函数
- 如何每 10 秒调用一次 JS 函数,然后以角度激活一个函数
- 节点 js 在启动时调用函数一次
- 有人可以帮助我调试带有addClass和removeClass函数的“每个会话一次”cookie吗?
- 如何在 window.setInterval 中每分钟运行一次 getJSON 函数
- 一次将多个对象传递给函数参数
- 就绪函数上的指令只能执行一次
- 一段时间后调用函数,但只调用一次
- 如何加载一个html页面并在其中只需单击一次即可运行函数
- Javascript只使用setInterval()调用一个子函数一次
- 元素在JavaScript函数中只更改过一次
- 函数只更改一次内容