在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是什么吗?
答案 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;