| | |
| | | var global = require('../internals/global'); |
| | | var isCallable = require('../internals/is-callable'); |
| | | var fails = require('../internals/fails'); |
| | | var apply = require('../internals/function-apply'); |
| | | var bind = require('../internals/function-bind-context'); |
| | | var isCallable = require('../internals/is-callable'); |
| | | var hasOwn = require('../internals/has-own-property'); |
| | | var fails = require('../internals/fails'); |
| | | var html = require('../internals/html'); |
| | | var arraySlice = require('../internals/array-slice'); |
| | | var createElement = require('../internals/document-create-element'); |
| | | var validateArgumentsLength = require('../internals/validate-arguments-length'); |
| | | var IS_IOS = require('../internals/engine-is-ios'); |
| | | var IS_NODE = require('../internals/engine-is-node'); |
| | | |
| | | var set = global.setImmediate; |
| | | var clear = global.clearImmediate; |
| | | var process = global.process; |
| | | var MessageChannel = global.MessageChannel; |
| | | var Dispatch = global.Dispatch; |
| | | var Function = global.Function; |
| | | var MessageChannel = global.MessageChannel; |
| | | var String = global.String; |
| | | var counter = 0; |
| | | var queue = {}; |
| | | var ONREADYSTATECHANGE = 'onreadystatechange'; |
| | |
| | | } catch (error) { /* empty */ } |
| | | |
| | | var run = function (id) { |
| | | // eslint-disable-next-line no-prototype-builtins -- safe |
| | | if (queue.hasOwnProperty(id)) { |
| | | if (hasOwn(queue, id)) { |
| | | var fn = queue[id]; |
| | | delete queue[id]; |
| | | fn(); |
| | |
| | | |
| | | // Node.js 0.9+ & IE10+ has setImmediate, otherwise: |
| | | if (!set || !clear) { |
| | | set = function setImmediate(fn) { |
| | | var args = []; |
| | | var argumentsLength = arguments.length; |
| | | var i = 1; |
| | | while (argumentsLength > i) args.push(arguments[i++]); |
| | | set = function setImmediate(handler) { |
| | | validateArgumentsLength(arguments.length, 1); |
| | | var fn = isCallable(handler) ? handler : Function(handler); |
| | | var args = arraySlice(arguments, 1); |
| | | queue[++counter] = function () { |
| | | // eslint-disable-next-line no-new-func -- spec requirement |
| | | (isCallable(fn) ? fn : Function(fn)).apply(undefined, args); |
| | | apply(fn, undefined, args); |
| | | }; |
| | | defer(counter); |
| | | return counter; |
| | |
| | | channel = new MessageChannel(); |
| | | port = channel.port2; |
| | | channel.port1.onmessage = listener; |
| | | defer = bind(port.postMessage, port, 1); |
| | | defer = bind(port.postMessage, port); |
| | | // Browsers with postMessage, skip WebWorkers |
| | | // IE8 has postMessage, but it's sync & typeof its postMessage is 'object' |
| | | } else if ( |