如何在没有客户端在页面上的情况下运行javascript函数



我有一个 settimeout 函数,当该用户的时间用完时,它基本上可以从我的数据库中删除一个对象。但是,这仅在客户端导航到页面时有效,因为这是该 settimeout 函数运行时。这有点错误,因为假设用户导航到我的页面,调用设置超时并开始倒计时,但如果用户现在导航到其他页面或关闭 Web 应用程序,即使用户的时间已经用完,settimeout 函数也不会继续并从数据库中删除对象,除非用户返回同一页面, 此时,setTimeout 函数将再次被调用,并检测到时间已用完,然后它将继续从数据库中删除对象。

我怎样才能保持该javascript函数运行,基本上是离线的?因此,settimeout 函数应该从我的数据库中删除该对象,而无需用户导航到该页面

一个简单有效的解决方案是将创建此数据库对象的时间与对象一起存储。例如,如果要在数据库中存储Cat对象,请在对象上存储一个字段,以标明创建该对象的时间戳。

每当用户尝试访问数据库对象时,将当前时间与存储的对象时间进行比较(最好在服务器上)。如果经过的时间量大于对象应生存的时间量,请删除该对象。一些伪代码:

if (currentTime() - object.creationTime >= lifeTime)
object.destroy();

这也解决了提问者在问题评论中提到的关于显示"剩余时间"UI 元素的问题,因为此创建时间也可以发送到客户端(与对象一起),并且客户端可以执行相同的过程,查找自创建对象以来已经过去了多长时间,以确定对象剩余了多长时间。


还建议使用一些过程来偶尔检查数据库中的过期对象,以确保永远不会回来的客户端在这些对象过期时不会在数据库中留下永久对象。

最新更新