summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKiko Beats <josefrancisco.verdu@gmail.com>2016-06-02 22:05:49 +0200
committerKiko Beats <josefrancisco.verdu@gmail.com>2016-06-02 22:05:49 +0200
commit147800045598e51fa48db050d7a4fec4e189a842 (patch)
treee95fb01ddd781a31cc905952162dc8e01a465664
parent1a388551cc6724bbe97a670bd1bd60ae7bbb89e2 (diff)
downloadasync-147800045598e51fa48db050d7a4fec4e189a842.tar.gz
Consistent nextTick implementation
-rw-r--r--lib/internal/setImmediate.js33
-rw-r--r--lib/nextTick.js16
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);