A tiny modern no-nonsense "current-tick" implementation that equeues your function to be executed
later within the current event loop cycle, exactly what unfortunately named
process.nextTick
does in Node.js,
but current-tick
also works in the browser.
It will try below methods in the following order:
process.nextTick
Promise
MutationObserver
WebkitMutationObserver
current-tick
will be equal to null
if your evironment does not support any of the above methods.
import currentTick from 'current-tick';
if (!currentTick) {
console.log('Your environment is not supported!');
}
currentTick(() => console.log('world!'));
console.log('Hello');
// ๐ Hello world!
If you use TypeScript, because currentTick
may be null
, if you know for sure your evironment supports
at least one of the methods, you can use !
to tell the TypeScript compiler that currentTick
is not null
.
currentTick!(fn);
Alternatively, you can define an asap
method, that will 100% always exist, but
will not guarantee that your function is always executed within the current event loop cycle.
const asap = currentTick ||
typeof setImmediate === 'function'
? setImmediate
: fn => setTimeout(fn, 0);
asap
function is already prepared for you:
import asap from 'current-tick/lib/asap';
asap(() => console.log('world!'));
console.log('Hello');
// ๐ Hello world!
Unlicense โ public domain.