...contains a program that executes a function every millisecond using
setInterval. It then uses setTimeout to executes a function every two
milliseconds, then every millisecond, then it invokes a function
repeatedly with a zero value (which is supposed to be reset to 1
according to the documentation.) Finally, it invokes a function
repeatedly using nextTick.
Using the high-resolution timer, the program samples the intervals and
prints them to standard out.
The setInterval function works as expected, invoking its callback at
millisecond intervals. With a value of 2, setTimeout will invoke its
callback after a two millisecond interval. With a value of 1 or 0,
setTimeout calls back its callback immediately, in about two
microseconds, a little bit faster than nextTick.
Is this correct? I'd expect that setTimeout would always wait for at
least a millisecond before invoking its callback.
> ...contains a program that executes a function every millisecond using
> setInterval. It then uses setTimeout to executes a function every two
> milliseconds, then every millisecond, then it invokes a function
> repeatedly with a zero value (which is supposed to be reset to 1
> according to the documentation.) Finally, it invokes a function
> repeatedly using nextTick.
> Using the high-resolution timer, the program samples the intervals and
> prints them to standard out.
> The setInterval function works as expected, invoking its callback at
> millisecond intervals. With a value of 2, setTimeout will invoke its
> callback after a two millisecond interval. With a value of 1 or 0,
> setTimeout calls back its callback immediately, in about two
> microseconds, a little bit faster than nextTick.
> Is this correct? I'd expect that setTimeout would always wait for at
> least a millisecond before invoking its callback.
The setTimeout(ƒ,0) behaving as a nextTick(ƒ) is the proper behaviour
for a setTimeout(ƒ,0) with no clamping (the browsers clamp it to a
minimun of several ms, mainly due to a bug in jquery).
But, the setTimeout(ƒ,1) behaving as a setTimeout(ƒ,0) is *clearly* a
bug.
Node's timers have always been buggy -and still are- for example this:
setTimeout(a,10), setTimeout(b,10)
may fire a then b, or b then a, which is another bug.
> > ...contains a program that executes a function every millisecond using
> > setInterval. It then uses setTimeout to executes a function every two
> > milliseconds, then every millisecond, then it invokes a function
> > repeatedly with a zero value (which is supposed to be reset to 1
> > according to the documentation.) Finally, it invokes a function
> > repeatedly using nextTick.
> > Using the high-resolution timer, the program samples the intervals and
> > prints them to standard out.
> > The setInterval function works as expected, invoking its callback at
> > millisecond intervals. With a value of 2, setTimeout will invoke its
> > callback after a two millisecond interval. With a value of 1 or 0,
> > setTimeout calls back its callback immediately, in about two
> > microseconds, a little bit faster than nextTick.
> > Is this correct? I'd expect that setTimeout would always wait for at
> > least a millisecond before invoking its callback.
> The setTimeout(ƒ,0) behaving as a nextTick(ƒ) is the proper behaviour
> for a setTimeout(ƒ,0) with no clamping (the browsers clamp it to a
> minimun of several ms, mainly due to a bug in jquery).
What "bug" in jQuery are you referring to? No browser vendor/implementor
would make any such concessions.
> > ...contains a program that executes a function every millisecond using > > setInterval. It then uses setTimeout to executes a function every two > > milliseconds, then every millisecond, then it invokes a function > > repeatedly with a zero value (which is supposed to be reset to 1 > > according to the documentation.) Finally, it invokes a function > > repeatedly using nextTick.
> > Using the high-resolution timer, the program samples the intervals and > > prints them to standard out.
> > The setInterval function works as expected, invoking its callback at > > millisecond intervals. With a value of 2, setTimeout will invoke its > > callback after a two millisecond interval. With a value of 1 or 0, > > setTimeout calls back its callback immediately, in about two > > microseconds, a little bit faster than nextTick.
> > Is this correct? I'd expect that setTimeout would always wait for at > > least a millisecond before invoking its callback.
> The setTimeout(ƒ,0) behaving as a nextTick(ƒ) is the proper behaviour > for a setTimeout(ƒ,0) with no clamping (the browsers clamp it to a > minimun of several ms, mainly due to a bug in jquery).
> But, the setTimeout(ƒ,1) behaving as a setTimeout(ƒ,0) is *clearly* a > bug.
> Node's timers have always been buggy -and still are- for example this:
> setTimeout(a,10), setTimeout(b,10)
> may fire a then b, or b then a, which is another bug.