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

how to store setTimeout id on mongodb database?

我将 NodeJs 与 express 一起使用,我想将 setTimeout 的 ID 存储到数据库中,以便稍后可以使用 clearTimeout 我目前为此使用以下代码

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

clearTimeout(timerId)

此代码工作正常,但 timerId 包含一个对象,这就是为什么我无法将其存储在数据库中的原因是否有任何其他方法可以做到这一点,或者是否有方法可以转换 [=40= 可接受的对象]

这是我在打印 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. 加入请求
  2. 接受请求
  3. 拒绝请求

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

为了做这件事,我 运行 加入请求设置超时 api 如果管理员接受或拒绝请求,我清除该设置超时,如果它不接受或拒绝请求,则我的设置超时 运行s amd 自动拒绝该请求

但问题是为了清除 settimeout,我需要 settimeout id,但我无法保存,请告诉我是否有任何方法可以实现此

提前致谢

timerId 只是一个数字。可以直接存到MongoDB.

上述代码应该可以正常工作并且应该 return 一个数字。但是,我认为将 ID 存储在数据库中不是一个好主意。即使我不知道您的确切用例,我想您要做的是 clearTimeout 在实际超时发生之前。但由于 setTimeout 是一个运行时计时器,一旦应用程序退出其运行时就会被杀死,因此最好将 ID 保留在运行时而不是在数据库中,因为它在 [=14= 之后将过时] 您设置的超时时间。

希望对您有所帮助!!

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

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

为了做这件事,我 运行 加入请求设置超时 api 如果管理员接受或拒绝该请求,我清除该设置超时,如果它不接受或拒绝请求然后我的设置超时 运行s amd 自动拒绝该请求

那么你只需要管理那个时间戳即可。

如果用户请求不能显示给管理员,则只显示在一段时间内待处理的请求。

如果必须向执行请求的用户显示请求状态,请在用户拒绝超过置信区间的请求时通过时间戳管理请求状态(这也可以通过管理员完成。)