chrisguttandin/worker-timers

The behavior of clearInterval and clearTimeout differs from what is written on MDN

Closed this issue · 2 comments

First of all, thank you for this incredible library! timers in web workers are wonderful and much more reliable

MDN says Passing an invalid ID to clearTimeout() silently does nothing; no exception is thrown but workers-timers throw an error when i pass a invalid id to clearInterval or clearTimeout and this error cannot caught by try-catch, this has caused me some strange infinite loop problems

repro: https://stackblitz.com/edit/vitejs-vite-sg1zde?file=src%2FApp.tsx

Hi @luccasr73, thanks for reporting this. When looking into it I realized that this behavior even caused a memory on the worker. I aligned the behavior with the one of the native timers. I published the changes as v8.0.0.

The only remaining difference should be that intervals and timeouts are handled separately.

worker-timers/README.md

Lines 45 to 59 in 10fa538

## Differentiation between Intervals and Timeouts
The native WindowTimers only maintain a single list of timers. But `worker-timers` maintains two separate lists to store the ids of intervals and timeouts internally. WindowTimers allows intervals to be cancelled by calling `clearTimeout()` and the other way round because it stores all timers in a single list. This is not possible with `worker-timers`.
```js
const periodicWork = () => {};
// This will stop the interval.
const windowId = window.setInterval(periodicWork, 100);
window.clearTimeout(windowId);
// This will not cancel the interval. It may cancel a timeout.
const workerId = setInterval(periodicWork, 100);
clearTimeout(workerId);
```

thanks for the fix