Sha256: c898a289a0a6294b94d99b48c46ac559de89e0657eafd529ce719cd6d9d917f1
Contents?: true
Size: 1.7 KB
Versions: 62
Compression:
Stored size: 1.7 KB
Contents
var nextTick = require('process/browser.js').nextTick; var slice = Array.prototype.slice; var immediateIds = {}; var nextImmediateId = 0; // DOM APIs, for completeness if (typeof setTimeout !== 'undefined') exports.setTimeout = function() { return setTimeout.apply(window, arguments); }; if (typeof clearTimeout !== 'undefined') exports.clearTimeout = function() { clearTimeout.apply(window, arguments); }; if (typeof setInterval !== 'undefined') exports.setInterval = function() { return setInterval.apply(window, arguments); }; if (typeof clearInterval !== 'undefined') exports.clearInterval = function() { clearInterval.apply(window, arguments); }; // TODO: Change to more efficient list approach used in Node.js // For now, we just implement the APIs using the primitives above. exports.enroll = function(item, delay) { item._timeoutID = setTimeout(item._onTimeout, delay); }; exports.unenroll = function(item) { clearTimeout(item._timeoutID); }; exports.active = function(item) { // our naive impl doesn't care (correctness is still preserved) }; // That's not how node.js implements it but the exposed api is the same. exports.setImmediate = function(fn) { var id = nextImmediateId++; var args = arguments.length < 2 ? false : slice.call(arguments, 1); immediateIds[id] = true; nextTick(function onNextTick() { if (immediateIds[id]) { // fn.call() is faster so we optimize for the common use-case // @see http://jsperf.com/call-apply-segu if (args) { fn.apply(null, args); } else { fn.call(null); } // Prevent ids from leaking exports.clearImmediate(id); } }); return id; }; exports.clearImmediate = function(id) { delete immediateIds[id]; };
Version data entries
62 entries across 62 versions & 1 rubygems