как сохранить идентификатор setTimeout в базе данных mongodb? - PullRequest
0 голосов
/ 09 октября 2018

Я использую NodeJs с экспрессом, и я хочу сохранить идентификатор setTimeout в базе данных, чтобы позже я мог использовать 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. объединить запрос
  2. принять-запрос
  3. reject-request

пользователь отправляет запрос на присоединение в API запроса на присоединение, затем я отправляю массив в базу данных, содержащую все запросы на присоединение, затем администратор принимает и отклоняет запрос из этих журналов, но я хочу, чтобы яхочу, если администратор не принял или отклонил запрос на автоматическое отклонение запроса через некоторое время

и для этого я запускаю settimeout на join-request api, и если администратор принимает или отклоняет запрос, я очищаю этот settimeout, и если он не принимает или отклоняет реквизит, тогда мой settimeout запускается, и amd отклоняет этот запрос автоматически

, но проблема заключается в том, что для очистки settimeoutМне нужен идентификатор settimeout, который я не могу сохранить. Пожалуйста, сообщите моему, если есть какой-либо способ добиться этого

заранее спасибо

Ответы [ 3 ]

0 голосов
/ 09 октября 2018

Вышеупомянутый код должен работать нормально и должен возвращать число.Но я не считаю хорошей идеей хранить ID в БД.Несмотря на то, что я не знаю вашего точного варианта использования, вы пытаетесь сделать clearTimeout до того, как истечет время ожидания.Но поскольку setTimeout является таймером времени выполнения и уничтожается, как только приложение выходит из среды выполнения, лучше хранить ID во время выполнения, чем в БД, поскольку оно устареет после установленного вами времени ожидания n second.

Надеюсь, это поможет !!

0 голосов
/ 09 октября 2018

пользователь отправляет запрос на присоединение к API-интерфейсу запроса на присоединение, затем я создаю массив в базе данных, содержащий все запросы на присоединение, затем администратор принимает и отклоняет запрос из этих журналов, но я хочу, чтобы я хотел, если бы администратор не сделал этого.принять или отклонить запрос на автоматическое отклонение запроса через некоторое время

Здесь вам нужно только сохранить в базе данных временную метку, по которой ваш запрос происходит.

и для этого я запускаю settimeout в api-запросе на соединение, и если администратор принимает или отклоняет запрос, я очищаю этот settimeout, а если он не принимает или отклоняет реквизит, тогда мой settimeout запускается и отклоняет этот запрос автоматически

Тогда вам нужно только управлять этой отметкой времени.

Если пользовательский запрос не должен отображаться администратором, только показать запрос, ожидающий в течение интервала времени.

Если состояние запроса должно быть показано пользователю, который выполняет запрос, управляйте состоянием запроса по времениmp, когда пользователь, отклоняя запросы, увеличивает доверительный интервал (это можно сделать и с помощью Admin).

0 голосов
/ 09 октября 2018

timerId - это просто число.Вы можете сохранить его непосредственно в MongoDB.

...