如何在mongodb数据库上存储setTimeout id?

时间:2018-10-09 10:53:54

标签: javascript node.js mongodb settimeout

我正在使用带有Express的NodeJ,我想将setTimeout的ID存储到数据库中,以便以后可以使用clearTimeout,我目前正在为此使用以下代码

var timerId = setTimeout(function(){
   console.log(id);
}, 100)

clearTimeout(timerId)

此代码运行良好,但是timerId包含一个对象,这就是为什么我无法将其存储在数据库中,或者是否有其他方法可以将其转换为MongoDB可接受的对象

这是我在打印timerId时得到的对象

Timeout {
_called: false,
_idleTimeout: 5000,
_idlePrev:
 TimersList {
 _idleNext: [Circular],
 _idlePrev:
  Timeout {
    _called: false,
    _idleTimeout: 5000,
    _idlePrev: [Circular],
    _idleNext: [Circular],
    _idleStart: 5876,
    _onTimeout: [Function],
    _timerArgs: undefined,
    _repeat: null,
    _destroyed: false,
    [Symbol(asyncId)]: 252,
    [Symbol(triggerAsyncId)]: 250 },
 _unrefed: false,
 msecs: 5000,
 nextTick: false,
 _timer: Timer { _list: [Circular] } },
_idleNext:
 Timeout {
  _called: false,
  _idleTimeout: 5000,
  _idlePrev: [Circular],
   _idleNext:
     TimersList {
      _idleNext: [Circular],
     _idlePrev: [Circular],
     _unrefed: false,
     msecs: 5000,
    nextTick: false,
    _timer: [Timer] },
 _idleStart: 5876,
 _onTimeout: [Function],
 _timerArgs: undefined,
 _repeat: null,
 _destroyed: false,
  [Symbol(asyncId)]: 252,
 [Symbol(triggerAsyncId)]: 250 },
_idleStart: 6029,
_onTimeout: [Function],
_timerArgs: undefined,
_repeat: null,
_destroyed: false,
[Symbol(asyncId)]: 316,
[Symbol(triggerAsyncId)]: 0 }

我想做的事情我有三个API

  1. join-request
  2. 接受请求
  3. 拒绝请求

用户将加入请求发送到加入请求api,然后我维护数据库中包含所有加入请求的数组,然后管理员接受和拒绝该日志中的请求,但是我想要的是如果管理员不接受或拒绝一段时间后该请求被自动拒绝的请求

为此,我在join-request api上运行了一个settimeout,如果管理员接受或拒绝该请求,则清除该settimeout;如果它不接受或拒绝该requset,则我的settimeout运行并自动拒绝该请求

但是问题在于,要清除settimeout,我需要无法保存的settimeout ID,请告诉我是否有任何方法可以实现

预先感谢

3 个答案:

答案 0 :(得分:2)

用户将加入请求发送到加入请求api,然后我维护数据库中包含所有加入请求的数组,然后管理员接受并拒绝该日志中的请求,但是我想要的是如果管理员没有接受或拒绝一段时间后自动被拒绝的请求

这里,您只需要在数据库中存储发生请求的时间戳即可。

为此,我在join-request api上运行了一个settimeout,如果管理员接受或拒绝该请求,则清除该settimeout,如果它不接受或拒绝该requset,则我的settimeout运行并拒绝该请求自动

然后,您只需要管理该时间戳记。

如果不能将用户请求显示给管理员,则仅在一段时间内显示未决请求。

如果必须向执行请求的用户显示请求状态,请在用户拒绝时间戳时使用时间戳记管理该请求状态(这也可以通过Admin来完成)

答案 1 :(得分:1)

上述代码应该可以正常工作,并且应该返回一个数字。但是,我认为将ID存储在DB中不是一个好主意。尽管我不知道您的确切用例,但是您正在尝试执行的操作,我想是在实际超时发生之前clearTimeout。但是由于setTimeout是运行时计时器,并且在应用程序退出运行时立即被杀死,因此最好将ID保留在运行时比保存在数据库中,因为在{{1}之后它会过时}您设置的超时时间。

希望这会有所帮助!

答案 2 :(得分:0)

timerId只是一个数字。您可以将其直接存储到MongoDB。