希望有人能在这里指出我正确的方向。我的 Electron 应用程序需要每 10 分钟左右执行一次 API 调用。我目前在渲染器进程中使用 setInterval 循环执行此操作,该循环每 10 分钟触发一次。
它通常工作正常,几个小时后它似乎只是停止发射。我有几个进程可以清除并重新启动 setInterval 以尝试解决问题,但似乎没有任何效果。
该应用程序打开新的浏览器窗口并显示内容,这意味着主窗口可能不会一直处于焦点,我怀疑这可能与它有关。
我试过添加
powerSaveBlocker.start("prevent-display-sleep");
powerSaveBlocker.start("prevent-app-suspension");
到我的主要 Electron js 脚本,但它似乎没有效果。该问题主要显示在 Windows 机器上。我不完全确定它是否发生在 Mac 或 Linux 上。
所以我的问题是,有什么理由会导致间隔在某一点后消失? powerSaveBlocker 调用对我来说很有意义,但它们似乎并没有做任何事情。
或者有没有更好的方法让后台进程以可以执行这些 API 调用的间隔运行?我看过
node-schedule
但我不确定它是否会解决这个问题。
最佳答案
在这里回答我自己的问题,归功于@snwflk,他在对原始帖子的评论中指出了正确的方向。
虽然我无法绝对肯定地澄清这解决了问题,但从那以后我也没有看到这个问题。 (它并不总是 100% 可重复的,并且它很难测试,因为它需要一台机器,单独放置几个小时,这可能会或可能不会显示问题)。
然而,我已经向一些客户推出了修复程序,他们的机器似乎在几天后仍然在线,这是一个好兆头。
因此,解决方案是禁用 backgroundThrottling
在主 BrowserWindow
对象(间隔在渲染器进程中运行)
文档:https://electronjs.org/docs/api/browser-window#new-browserwindowoptions
一个例子
mainWindow = new BrowserWindow({
webPreferences: {
backgroundThrottling: false,
},
});
仅供引用,有一些错误阻止了此设置的工作,即 https://github.com/electron/electron/issues/20974所以一定要更新你的 Electron 版本。
关于electron - setInterval 在使用 Electron 一小时后停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59557854/