在宁静的服务中setTimeout

时间:2014-02-06 10:53:48

标签: javascript node.js rest express timer

我正在使用 node.js + express 编写服务。我有计时器的问题。

我根本不存储任何状态,在路径中有2个功能。

route.js

var timeOutId;
exports.linkUpRequest = function() {
   // do some request to another user => insert record in db
   ...
   timeOutId = setTimeout(function() {
     //delete request => delete record from db
   }, 1000 * 60 * 60);
   res.send(...);
};


exports.confirm = function() {
   // record will be stored until user explicitly delete it => update that user confirm request
   clearTimeout(timeOutId);
   res.send(...);
};

我知道这是错误的解决方案,因为它是服务器,许多用户可以访问timeOutId变量。我的问题是如何处理 REST 服务中的计时器和超时ID。

注意:在评论中,我调用模型中的方法,这也是无状态的。

1 个答案:

答案 0 :(得分:1)

跟踪所有计时器参考并不容易。您可以做的一件事是在db中针对每个请求存储确认状态。确认后,将状态设置为已确认。在计时器结束时删除记录之前检查此状态,如果确认不删除请求。这样您就不会取消已确认请求的计时器,但这些请求在超时时不会被删除。