gpt4 book ai didi

electron - 如何在Electron BrowserWindow中设置setInterval()?

转载 作者:行者123 更新时间:2023-12-03 12:41:45 27 4
gpt4 key购买 nike

我有一个简单的Electron应用程序,该应用程序查询SQL数据库并通过HTML表显示输出。我一切正常,但是现在我需要每X分钟“刷新” HTML表(使用SQL查询的新结果)。

现在,我可以直接在HTML中使用meta标记,使它正常工作:http-equiv =“refresh” content =“300”。这每5分钟正确刷新一次页面,这正是我想要的。

虽然,问题在于刷新会导致在执行SQL查询和构建HTML时屏幕变白。显然,更好的解决方案是使用DOM并仅修改自上次刷新以来实际发生更改的单元格。我遇到的问题是使“setInterval”能够正常工作...。再一次,这是一个非常简单的 Electron 应用程序。我正在使用他们的启动样板。我尝试使用以下代码在<body>标记中添加“setInterval”:

<body onload='setInterval(updateTable(), 300000);'>

但是代码仅触发一次...我也尝试在主体的末尾添加以下代码(就在 </body>标记内):
<script>
window.onload=function(e){
setInterval(updateTable(), 300000);
}
</script>

...将其从window.onload处理程序中删除...:
<script>
setInterval(updateTable(), 300000);
</script>

...并将其移动到“renderer.js”文件中:
setInterval(updateTable(), 300000);

在所有情况下,它只会触发一次...我知道这一点,因为updateTable()中的第一行代码通过console.log()将当前日期和时间输出到控制台。

我尝试将超时值降低到10秒(从300000降低到10000),只是这样,我不必在测试中等待那么长时间,这没有任何区别。我怀疑我遇到的问题与我对 Electron 框架的缺乏了解(例如,可能有不同的“过程”)有关,并且我一直在寻找解决方案已有两天了,没有运气。关于如何实现此目标的任何建议,都深表感谢!

最佳答案

TL; DR

您的问题与Electron无关,与您传递给setInterval的确切内容无关。您没有传递函数updateTable,而是传递了函数调用updateTable()的结果。删除函数名称后的括号。

分析

函数setIntervalsetTimeout都将函数作为其第一个参数,它们将在特定时间或定期调用。但是,传递给setInterval的不是函数。你写:

setInterval(updateTable(), 10000)

执行此行时,将调用 updateTable并将其返回值传递给 setInterval。 (如果该函数未明确返回任何内容,则返回 undefined。)这就是为什么您的函数仅被调用一次(设置计时器时)的原因。

如果你写
setInterval(updateTable, 10000) // no parentheses

您实际上是将该函数传递给 setInterval,然后它将重复运行它。

您可能想知道为什么使用 setTimeout的解决方法行得通。这是因为您实际上将一个函数传递给它。您要内联指定函数,但此时不要调用它。在该函数内部,您可以调用 updateTable无关紧要。重要的是您传递给计时器函数的内容。

关于electron - 如何在Electron BrowserWindow中设置setInterval()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60031543/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com