return value setTimeout and Deno.unrefTimer

Hi,

In the recent version, I had no trouble passing the return value from setTimeout to Deno.unrefTimer.
But today I get this:
TypeError: expected f64
 ❯ Object.unrefTimer ext:core/01_core.js:810:25
 ❯ Object.unrefTimer ext:deno_web/02_timers.js:123:8
 ❯ ResolveOnce.setProcessed src/resolve-once.ts:627:20

and some logs later:
ResolveOnce set a reset timer for Timeout {
  _idleTimeout: 10,
  _onTimeout: [Function (anonymous)],
  _timerArgs: [],
  _isRepeat: false,
  _destroyed: false,
  [Symbol(refed)]: true,
  [Symbol(timerId)]: 202
} on { deno: '2.5.6', v8: '14.0.365.5-rusty', typescript: '5.9.2' }

Why does setTimeout return a structure, and unrefTime might look for a value in [Symbol(timerId)]?

Did I miss something, or is that an error?

There is something strange going on. I tried to make it work, and need this code, which means there are some cases where the returned value is a number, and sometimes it's the struct:
Deno.unrefTimer timerId from struct: 236 version: { deno: '2.5.6', v8: '14.0.365.5-rusty', typescript: '5.9.2' }

Deno.unrefTimer failed to get timerId TypeError: Reflect.ownKeys called on non-object
    at Reflect.ownKeys (<anonymous>)
    at ResolveOnce.setProcessed (file:///Users/menabe/Software/cement/ts/src/resolve-once.ts:629:41)
    at file:///Users/menabe/Software/cement/ts/src/resolve-once.ts:369:23
    at <anonymous> id: 1 version: { deno: "2.5.6", v8: "14.0.365.5-rusty", typescript: "5.9.2" }

thats the coerce code:
let id = this.resetAfterTimer as unknown as number;
if (typeof Deno.unrefTimer === "function") {
  try {
    const ret = Reflect.ownKeys(this.resetAfterTimer).find((key) => {
      return key.toString().includes("timerId");
    });
    if (ret) {
      id = this.resetAfterTimer[ret as keyof typeof this.resetAfterTimer] as unknown as number;
      console.warn("Deno.unrefTimer timerId from struct:", id, "version:", globalThis.Deno?.version); 
    }
  } catch (e) {
    // eslint-disable-next-line no-console
    console.warn("Deno.unrefTimer failed to get timerId", e, "id:", this.resetAfterTimer, "version:", globalThis.Deno?.version);
  }
  Deno.unrefTimer(id);
}
Was this page helpful?