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
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' }
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" }
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);
}
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);
}
0 Replies
No replies yetBe the first to reply to this messageJoin

Did you find this page helpful?