我有一个settimeout函数,当该用户的时间用完时,它基本上从数据库中删除了一个对象。但是,这仅在客户端导航到该页面(即settimeout函数运行时)时有效。之所以出现这种错误,是因为说用户导航到我的页面,调用settimeout并开始倒计时,但是如果用户现在导航到另一个页面或关闭Web应用程序,即使该用户的时间已用完,除非用户返回同一页面,否则settimeout函数将不会继续从数据库中删除对象,这时再次调用settimeout函数并将检测到时间已到,然后它将继续进行并删除数据库中的对象。

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

最佳答案

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

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

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


这也解决了问题注释中提到的提问者关于显示“剩余时间” UI元素的问题,因为此创建时间也可以发送给客户端(连同对象),并且客户端可以执行相同的查找多长时间的过程自从创建对象以来,就一直确定该对象还剩下多长时间。



最好有一些过程偶尔检查数据库中是否有过期的对象,以确保永不回来的客户端在这些对象应过期时不会将永久对象留在数据库中。

10-08 17:20