我使用下面的代码每秒播放一个音频文件,音频文件是第二个长,它基本上是一个滴答声。代码只运行一次,然后我在控制台中看到错误。我的目的是让它每秒运行一次,直到某些东西实现,然后我就可以清除Interval了。这是我在控制台中得到的错误
Uncaught SyntaxError: Unexpected identifier
setInterval (async)
这是我的代码:
$('select[name=notsound]').change(function(){
var h = $(this).val();
var tickAudio = new Audio('https://www.sample.com/sounds/'+h+'');
setInterval(tickAudio.play(),1000);
});
我不确定为什么会发生这种情况,我确信我已经犯了一些导致这个问题的错误,因为它在我考虑给它一个不同的方法之前工作。感谢您阅读我的查询。 :)
答案 0 :(得分:3)
需要在正确的对象的上下文中调用方法play
:
var cleartick = setInterval(tickAudio.play.bind(tickAudio),1000);
@rmlan的第二个建议也可以。
清除间隔是相同的 - 您不需要调用函数,而是将函数引用传递给setTimeout
:
setTimeout(clearInterval, 3000, cleartick);
setInterval
/ setTimeout
可以方便地将参数传递给计时器功能 - 如上面的cleartick
。
答案 1 :(得分:1)
您目前正在执行"每秒tickAudio.play()
的结果,而不是执行函数本身。
要解决此问题,您可以将该函数作为对象传递:
setInterval(tickAudio.play.bind(tickAudio),1000);
或者用匿名函数包装调用:
setInterval(function () { tickAudio.play() },1000);