<div dir="ltr"><div>tl;dr - I would simply fix `setTimeout 0` ^_^<br></div><div><br></div>long story long:<div>from a suer perspective, I never understood why `setTimeout(fn, 0, arguments)` does not act as `setImmediate(fn, arguments)` where latter one is apparently needed to indeed replace a misleading behavior with first `setTimeout` "broken" call.<div>
<br></div><div>IMO, 0 (zero) means "immediate", "asap", on next "tick" ... why should a user care about bad implementations from vendors? Why vendors should accept 0 at all if 4ms is the minimum? The problem is infinite loop? `for(var i = arr.length; --i; doStuff);` is still able to "block a thread" so why `setTimeout` would care? how can `setImmediate` prevent bad designed code or infinite loops in a way `setTimeout 0` couldn't?</div>
<div><br></div><div>Last but not least: I have no idea why DOM and W3C features should change anything in current ES specs and I still I don't practically get what makes setImmediate so special that setTimeout(fn, 0[, arguments]) cannot achieve resulting in a simplified, unique, way to set timers in JS world and leave W3C stuff out of the equation.</div>
<div><br></div><div>Best Regards</div><div><br></div><div><br></div></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Aug 8, 2013 at 8:06 AM, Forbes Lindesay <span dir="ltr"><<a href="mailto:forbes@lindesay.co.uk" target="_blank">forbes@lindesay.co.uk</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">How about just adding a parameter that tells you whether it was delayed for taking too long:<br>
<br>
```js<br>
asap(function (tooLong) {<br>
  if (tooLong) {<br>
    //attempt to restore invariants here<br>
  }<br>
  //do work here<br>
})<br>
```<br>
<br>
And then follow @domenic's solution of just pushing it into the next macro-task if it's spent too long executing micro tasks.<br>
<br>
That way users who didn't care about such invariants could just ignore that argument and those who do can choose how to handle it gracefully.<br>
<div class="HOEnZb"><div class="h5">_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
</div></div></blockquote></div><br></div>