我想安排一些代码在可变时间运行。例如,在60分钟后,我想向端点发送HTTP请求并更新数据库文档,但我也希望能够在60分钟之前发生操作时取消该代码。
建筑师的最佳方法是什么?我希望它能够在服务器重启后继续存在,并且如果我的应用程序跨多个服务器扩展,也能正常工作。
谢谢!
答案 0 :(得分:1)
您可以使用setTimeout()
并保存它返回的计时器ID,因为您可以使用该计时器ID取消计时器。安排计时器:
var timer = setTimeout(myFunc, 60 * 60 * 1000);
然后,在计时器触发之前的某个时间,您可以使用以下命令取消计时器:
clearTimeout(timer);
如果您希望在服务器重新启动后继续运行,那么您还需要保存希望定时器触发到某个持久存储的实际系统时间(如磁盘或数据库上的配置文件)。然后,当您的服务器启动时,您从持久性存储中读取该值,如果已设置,则设置将在此时触发的新setTimeout()
。同样,当计时器触发或由于您不再需要它而清除计时器时,您会更新持久存储,以便将来没有存储时间。
你可以通过创建一个persistentTimer
对象来使用这一点,这个对象有一个设置定时器的方法,清除定时器并从服务器重启时使用的任何持久存储初始化。