setImmediate.js
 1  'use strict';
 2  /* istanbul ignore file */
 3  
 4  Object.defineProperty(exports, "__esModule", {
 5      value: true
 6  });
 7  exports.fallback = fallback;
 8  exports.wrap = wrap;
 9  var hasSetImmediate = exports.hasSetImmediate = typeof setImmediate === 'function' && setImmediate;
10  var hasNextTick = exports.hasNextTick = typeof process === 'object' && typeof process.nextTick === 'function';
11  
12  function fallback(fn) {
13      setTimeout(fn, 0);
14  }
15  
16  function wrap(defer) {
17      return (fn, ...args) => defer(() => fn(...args));
18  }
19  
20  var _defer;
21  
22  if (hasSetImmediate) {
23      _defer = setImmediate;
24  } else if (hasNextTick) {
25      _defer = process.nextTick;
26  } else {
27      _defer = fallback;
28  }
29  
30  exports.default = wrap(_defer);