过期或超时在X秒后永不结束循环

Expire or Time Out never ending loop after X seconds

本文关键字:结束 循环 超时 过期      更新时间:2023-09-26

如何在5秒后停止此进程?

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script type="text/javascript">
    function changeBanner(){ 
        // my change banner code
    }
    window.onload = function () { setInterval(changeBanner, 100) };
</script>

所以目前我每100毫秒改变一次横幅。但是我希望它在5秒后停止。

我想setTimeout可能会有效果;

window.onload = function () { setTimeout(setInterval(changeBanner, 100), 5000) };

我想让它在5秒后停止。

存储setInterval的返回值并与clearInterval一起使用

var timer = setInterval(changeBanner, 100);
setTimeout(function() {
    clearInterval(timer)
}, 5000);

也有几个库实现函数包装器来实现相同的功能。例如,在underscore.js中,您可以使用_.before:

var changeBannerLimited = _.before(50, changeBanner);
var timer = setInterval(changeBannerLimited, 100);

注意,与使用clearInterval相反,这将永远继续调用changeBannerLimited函数,然而在被调用50次(10 * 5秒)之后,它将不再将调用传递给changeBanner。

顺便说一下我选择了underscore.js,因为我对它很了解,而且它提供了格式良好的带注释的源代码,所以你可以很容易地理解幕后真正发生的事情。

您可以将setInterval的返回值存储到一个变量中,以便稍后可以取消它:

function changeBanner(){ 
    // my change banner code
}
window.onload = function () {
    var id=setInterval(changeBanner, 100);
    window.setTimeout(function() {
        window.clearInterval(id);
    },5000);
};

使用clearInterval

window.onload = function () {
    var bannerInterval = setInterval(changeBanner, 100);
    setTimeout(function() {
        clearInterval(bannerInterval);
    }, 5000);
};

setInterval的输出保存在变量中,以便能够调用clearInterval;

 window.onload = function () {
  var job= setInterval(changeBanner, 100) ;
  setTimeout(clearInterval(job), 5000)
};