JavaScript 函数 setTimeout() 和 setInterval() 有时不工作

Posted

技术标签:

【中文标题】JavaScript 函数 setTimeout() 和 setInterval() 有时不工作【英文标题】:JavaScript functions setTimeout() and setInterval() are sometimes not working 【发布时间】:2020-11-22 23:07:44 【问题描述】:

我自己的 Google Chrome 扩展程序在一段时间后停止工作,因为 setTimeout() 在某些情况下不起作用。

因此,在一些必要的延迟之后,后台脚本不会向内容脚本发送消息。

我通过编写许多 console.log() 语句发现了这个问题。

作为一种解决方案,我考虑使用 setInterval() 直到将消息发送到内容脚本:

var timer = setInterval(function() 
  clearInterval(timer);
  // Sending a message to the content script
, 3000);

我在 setInterval() 之前、期间和之后的代码都很安静,所以我希望这段代码 sn-p 足够了。

有谁知道这些超时或间隔在哪些情况下不开始?

或者我可以使用任何类似的选项吗?

我曾考虑过使用 Chrome 警报 API,但警报每分钟只能使用一次,如果我没记错的话,最小延迟是一分钟。

【问题讨论】:

setInterval 的用法很奇怪。无论如何,也许“停止工作”与其他代码有关? 如果您使用"persistent":false 声明后台脚本,这是正确且预期的行为:后台脚本将在不活动时卸载而忽略任何计时器。见Persistent background page on demand or an event page that doesn't unload? 【参考方案1】:

我从未遇到过任何 setinterval 或 settimeout 停止工作的问题。我猜你的代码可能有问题。如果您确定该错误,您应该制作一个演示项目并在 github 上报告错误。

【讨论】:

以上是关于JavaScript 函数 setTimeout() 和 setInterval() 有时不工作的主要内容,如果未能解决你的问题,请参考以下文章

setTimeout 函数执行代码没有任何延迟。 Javascript [重复]

在javascript中的另一个setTimeout函数中使用setTimeout

JavaScript 的setTimeout 和Angular中的$timeout的區別

JavaScript 函数 setTimeout() 和 setInterval() 有时不工作

javascript setTimeout函数的异步实现

javascript setTimeout错误函数