停止回调循环

问题描述 投票:0回答:1

下面是我的代码的简化版本。

我通过使用回调loop重复触发loop();函数。这很好,但是在将来的某个时候我希望能够使用我的loopStart函数来停止loop();回调(从而停止重复调用该函数)。我怎样才能做到这一点?

(function loopStart() {
    triggerAudio('1.wav'); 
}());

function triggerAudio(soundFileName) {
    (function loop() { // this function called repeatedly by callback
        setTimeout(function() { 
            // some code
            loop(); // callback
        }, randomTime); 
    }());
}

我见过使用clearTimeout的例子,但我怀疑这不会起作用,因为我不是真的停止了setTimout

javascript function loops callback settimeout
1个回答
0
投票

我通过将setTimeout(function() {更改为myVar = setTimeout(function() {并使用clearTimeout解决了我的问题。

这是更新的代码:

(function loopStart() {
    triggerAudio('1.wav'); 
    setTimeout(function() {
        clearTimeout(myVar); // using clearTimeout here
}, 5000); 
}());

function triggerAudio(soundFileName) {
    (function loop() { // this function called repeatedly by callback
        myVar = setTimeout(function() { // added myVar = here
            // some code
            loop(); // callback
        }, randomTime); 
    }());
}
© www.soinside.com 2019 - 2024. All rights reserved.