setTimeout _idleStart与Date.now()的区别?

时间:2019-05-10 06:20:55

标签: javascript node.js date object

在JavaScript(节点)中,setTimeout(callback,time)函数作为对象返回,例如

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是什么吗?

2 个答案:

答案 0 :(得分:0)

Date.now()将返回自UTC 1970年1月1日00:00:00起经过的毫秒数。但是,_idleStart是自Node.js会话启动以来的毫秒数。

答案 1 :(得分:0)

_idleStart是自启动Node会话以来的毫秒数,并且是在调用setTimeout时创建的静态值。

Date.now是Unix纪元(自1970年1月1日以来的毫秒数)。

因此,如果要计算使用setTimeout启动Node会话的时间,可以执行以下操作:

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