diff options
author | Kiko Beats <josefrancisco.verdu@gmail.com> | 2016-06-02 22:05:49 +0200 |
---|---|---|
committer | Kiko Beats <josefrancisco.verdu@gmail.com> | 2016-06-02 22:05:49 +0200 |
commit | 147800045598e51fa48db050d7a4fec4e189a842 (patch) | |
tree | e95fb01ddd781a31cc905952162dc8e01a465664 | |
parent | 1a388551cc6724bbe97a670bd1bd60ae7bbb89e2 (diff) | |
download | async-147800045598e51fa48db050d7a4fec4e189a842.tar.gz |
Consistent nextTick implementation
-rw-r--r-- | lib/internal/setImmediate.js | 33 | ||||
-rw-r--r-- | lib/nextTick.js | 16 |
2 files changed, 35 insertions, 14 deletions
diff --git a/lib/internal/setImmediate.js b/lib/internal/setImmediate.js index 7d15249..eb4ea63 100644 --- a/lib/internal/setImmediate.js +++ b/lib/internal/setImmediate.js @@ -1,21 +1,30 @@ 'use strict'; + import rest from 'lodash/rest'; -var _setImmediate = typeof setImmediate === 'function' && setImmediate; +export var hasSetImmediate = typeof setImmediate === 'function' && setImmediate; +export var hasNextTick = typeof process === 'object' && typeof process.nextTick === 'function'; + +export function fallback(fn) { + setTimeout(fn, 0); +} + +export function wrap(defer) { + return rest(function (fn, args) { + defer(function () { + fn.apply(null, args); + }); + }); +} var _defer; -if (_setImmediate) { - _defer = _setImmediate; -} else if (typeof process === 'object' && typeof process.nextTick === 'function') { + +if (hasSetImmediate) { + _defer = setImmediate; +} else if (hasNextTick) { _defer = process.nextTick; } else { - _defer = function(fn) { - setTimeout(fn, 0); - }; + _defer = fallback; } -export default rest(function (fn, args) { - _defer(function () { - fn.apply(null, args); - }); -}); +export default wrap(_defer); diff --git a/lib/nextTick.js b/lib/nextTick.js index 66a4c1f..a69b87e 100644 --- a/lib/nextTick.js +++ b/lib/nextTick.js @@ -1,4 +1,6 @@ -import setImmediate from './internal/setImmediate'; +'use strict'; + +import { hasNexTick, hasSetImmediate, fallback, wrap } from './internal/setImmediate'; /** * Calls `callback` on a later loop around the event loop. In Node.js this just @@ -30,4 +32,14 @@ import setImmediate from './internal/setImmediate'; * // a, b, and c equal 1, 2, and 3 * }, 1, 2, 3); */ -export default setImmediate; +var _defer; + +if (hasNexTick) { + _defer = process.nextTick; +} else if (hasSetImmediate) { + _defer = setImmediate; +} else { + _defer = fallback; +} + +export default wrap(_defer); |