UNPKG

async-wrappers

Version:

A set of wrapper functions to perform debouncing, throttling, retrying etc.

61 lines (51 loc) 1.25 kB
/** * @internal */ /** * @internal */ var deferred = callback => { var handle = null; var clear = clearTimeout; var call = () => { deferred.called = Date.now(); deferred.delay = -1; callback(); }; var defer = delay => { delay = delay < 0 ? 0 : delay; deferred.deferred = Date.now(); if (delay === 0 && deferred.delay === 0) { // if a delay is 0 it will happen on next execution. // so delaying a current delay of 0 should have no effect. // This is necessary here as a setTimeout implementation could // keep deferring execution, due to it's resolution issues. return; } // clear existing if (handle !== null) clear(handle); deferred.delay = delay; var useTimeout = !setImmediate || delay ? true : false; clear = useTimeout ? clearTimeout : clearImmediate; if (useTimeout) { handle = setTimeout(call, delay || 0); } else { handle = setImmediate(call); } }; var cancel = () => { if (handle !== null) { deferred.delay = -1; clear(handle); handle = null; } }; var deferred = { called: 0, deferred: 0, delay: -1, defer, cancel }; return deferred; }; export default deferred;