SetTimeout _idleStart отличается от Date.now ()?

В JavaScript (узел) функция setTimeout(обратный вызов, время) возвращает как объект, например

Timeout {
  _called: false,
  _idleTimeout: 10000,
  _idlePrev: [TimersList],
  _idleNext: [TimersList],
  _idleStart: 1540487,
  _onTimeout: [Function],
  _timerArgs: undefined,
  _repeat: null,
  _destroyed: false,
  domain: [Domain],
  [Symbol(unrefed)]: false,
  [Symbol(asyncId)]: 1679,
  [Symbol(triggerId)]: 5 }

Для правильного расчета времени, прошедшего с момента начала тайм-аута, мне придется записывать временную метку, когда я начинаю тайм-аут. НО есть эта переменная _idleStart, которая предположительно записала время начала.

Печать как Date.now(), так и timeout._idleStart показывает явную разницу (оба запускались одновременно).

> Date.now()
1557468948157

Можете ли вы объяснить разницу между двумя переменными, особенно что такое _idleStart?

Откуда вы взяли timeout? Я получаю «ReferenceError: тайм-аут не определен»... Думаю, _idleStart — это не отметка времени на основе Unix, а время, прошедшее с тех пор, как вы начали процесс или открыли страницу.

Roland Starke 10.05.2019 08:24

извините, это setTimeout. функция, используемая для ожидания определенного количества времени и обратного вызова. w3schools.com/jsref/met_win_settimeout.asp

I. AlSaud 10.05.2019 08:26

Для людей, которые могут запутаться, в браузере вы получаете идентификатор, но в узле вы получаете этот объект

Rajesh 10.05.2019 08:26

обновил вопрос. Спасибо @rajesh

I. AlSaud 10.05.2019 08:29

Учитывая, что этот объект не является стандартным, он вполне может измениться в будущих версиях node. Не уверен, что стоит на это полагаться, но тем не менее, setTimeout(()=>{})._idleStart === process.uptime() * 1000

Kaiido 10.05.2019 08:30
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
5
896
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Date.now() вернет количество миллисекунд, прошедших с 00:00:00 UTC 1 января 1970 года. Однако _idleStart — это количество миллисекунд с момента запуска сеанса Node.js.

Спасибо, вы знаете, где я могу получить доступ к объекту сеанса узла (чтобы узнать время начала). Просто любопытно.

I. AlSaud 10.05.2019 08:35

Чтобы узнать количество времени, в течение которого был открыт сеанс узла, используйте global.process.uptime()

vasia 02.07.2020 20:59
Ответ принят как подходящий

_idleStart — это количество миллисекунд с момента запуска сеанса Node, а также статическое значение, создаваемое при вызове setTimeout.

Date.now — эпоха Unix (миллисекунды с 1 января 1970 года).

Итак, если вы хотите рассчитать, когда вы начали сеанс Node, используя setTimeout, вы можете сделать это:

var time = Date.now() - setTimeout(() => {}, 0)._idleStart;

Нет, используйте правильный инструмент

Kaiido 10.05.2019 08:35

Другие вопросы по теме