我有一个settimeout函数,当该用户的时间用完时,它基本上从我的数据库中删除了一个对象。但是,这仅在客户端导航到页面时才有效,就像运行settimeout函数时一样。这是一种错误,因为说用户导航到我的页面,调用settimeout并开始倒计时,但如果用户现在导航到不同的页面或关闭Web应用程序,即使用户的时间用完了, settimeout函数将不会继续并从db中删除该对象,除非用户返回到同一页面,此时再次调用settimeout函数并检测到时间已用完然后它将继续并删除来自DB的对象。
如何让javascript函数保持运行,基本上是脱机?因此,settimeout函数应该从我的数据库中删除该对象,而无需用户导航到页面
答案 0 :(得分:1)
一种简单有效的解决方案是将创建此数据库对象的时间与对象一起存储。例如,如果要在数据库中存储Cat
对象,请在对象上存储一个字段,以显示创建它的时间戳。
每当用户尝试访问数据库对象时,将当前时间与存储的对象时间进行比较(最好是在服务器上)。如果传递的时间量大于对象应该存活的时间,则删除该对象。一些伪代码:
if (currentTime() - object.creationTime >= lifeTime)
object.destroy();
这也解决了问题中关于显示“剩余时间”UI元素的评论中提到的问题,因为这个创建时间也可以发送到客户端(与对象一起),并且客户端可以执行相同的过程查找自创建对象以来确定对象已离开多长时间的长度。
建议有一些进程偶尔检查数据库中是否有过期的对象,以确保永远不会返回的客户端在这些对象到期时不会在数据库中留下永久对象。