NodeJS setTimeout 中的计时器签名

timer signature in setTimeout in NodeJS

获取 Nodejs 计时器签名的正确方法是什么?

浏览器 returns 整数,但 NodeJS returns 内部对象似乎没有 属性 或带有可解析字符串或数字的方法。有什么办法可以得到这个吗?

给定以下代码:

var x = setTimeout(()=>{},1);

console.log(x); 在 NodeJS 中 returns:

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

而浏览器 returns(几乎是随机的)整数,例如 3

再问好@blagus,

您的答案实际上存在于文档中。在这里你可以看到 nodejs 文档中的 referance 调用 Symbol.toPrimitive;

const timer = setTimeout(() => {}, 100);
const timerID = timer[Symbol.toPrimitive]();

clearTimeout(timerID); // you can use this directly on clearTimeout to clear or
// clearTimeout(timer); // just use timer itself =)
console.log(timer[Symbol.toPrimitive]()); // give's you a serializable id which is a number bdw :)
console.log(timer);

试试这个解决方案:

let timerId: ReturnType<typeof setTimeout>

详情: 在浏览器中,计时器标识符是一个数字。在其他环境中,这可能是别的东西。例如,Node.js returns 带有附加方法的计时器对象。

ref: setInterval 部分

之前的最后一段