使用setInterval Javascript时未捕获的SyntaxError

时间:2018-05-10 14:42:45

标签: javascript jquery setinterval

我使用下面的代码每秒播放一个音频文件,音频文件是第二个长,它基本上是一个滴答声。代码只运行一次,然后我在控制台中看到错误。我的目的是让它每秒运行一次,直到某些东西实现,然后我就可以清除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);
    });

我不确定为什么会发生这种情况,我确信我已经犯了一些导致这个问题的错误,因为它在我考虑给它一个不同的方法之前工作。感谢您阅读我的查询。 :)

2 个答案:

答案 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);