setimmediate
Advanced tools
Comparing version 1.0.4 to 1.0.5
{ | ||
"name": "setimmediate", | ||
"description": "A shim for the setImmediate efficient script yielding API", | ||
"version": "1.0.4", | ||
"version": "1.0.5", | ||
"author": "YuzuJS", | ||
@@ -14,2 +14,5 @@ "contributors": [ | ||
"main": "setImmediate.js", | ||
"files": [ | ||
"setImmediate.js" | ||
], | ||
"scripts": { | ||
@@ -16,0 +19,0 @@ "lint": "jshint setImmediate.js", |
@@ -12,22 +12,47 @@ (function (global, undefined) { | ||
var doc = global.document; | ||
var setImmediate; | ||
var registerImmediate; | ||
function addFromSetImmediateArguments(args) { | ||
tasksByHandle[nextHandle] = partiallyApplied.apply(undefined, args); | ||
return nextHandle++; | ||
function setImmediate(callback) { | ||
// Callback can either be a function or a string | ||
if (typeof callback !== "function") { | ||
callback = new Function("" + callback); | ||
} | ||
// Copy function arguments | ||
var args = new Array(arguments.length - 1); | ||
for (var i = 0; i < args.length; i++) { | ||
args[i] = arguments[i + 1]; | ||
} | ||
// Store and register the task | ||
var task = { callback: callback, args: args }; | ||
tasksByHandle[nextHandle] = task; | ||
registerImmediate(nextHandle); | ||
return nextHandle++; | ||
} | ||
// This function accepts the same arguments as setImmediate, but | ||
// returns a function that requires no arguments. | ||
function partiallyApplied(handler) { | ||
var args = [].slice.call(arguments, 1); | ||
return function() { | ||
if (typeof handler === "function") { | ||
handler.apply(undefined, args); | ||
} else { | ||
(new Function("" + handler))(); | ||
} | ||
}; | ||
function clearImmediate(handle) { | ||
delete tasksByHandle[handle]; | ||
} | ||
function run(task) { | ||
var callback = task.callback; | ||
var args = task.args; | ||
switch (args.length) { | ||
case 0: | ||
callback(); | ||
break; | ||
case 1: | ||
callback(args[0]); | ||
break; | ||
case 2: | ||
callback(args[0], args[1]); | ||
break; | ||
case 3: | ||
callback(args[0], args[1], args[2]); | ||
break; | ||
default: | ||
callback.apply(undefined, args); | ||
break; | ||
} | ||
} | ||
function runIfPresent(handle) { | ||
@@ -39,3 +64,3 @@ // From the spec: "Wait until any invocations of this algorithm started before this one have completed." | ||
// "too much recursion" error. | ||
setTimeout(partiallyApplied(runIfPresent, handle), 0); | ||
setTimeout(runIfPresent, 0, handle); | ||
} else { | ||
@@ -46,3 +71,3 @@ var task = tasksByHandle[handle]; | ||
try { | ||
task(); | ||
run(task); | ||
} finally { | ||
@@ -56,11 +81,5 @@ clearImmediate(handle); | ||
function clearImmediate(handle) { | ||
delete tasksByHandle[handle]; | ||
} | ||
function installNextTickImplementation() { | ||
setImmediate = function() { | ||
var handle = addFromSetImmediateArguments(arguments); | ||
process.nextTick(partiallyApplied(runIfPresent, handle)); | ||
return handle; | ||
registerImmediate = function(handle) { | ||
process.nextTick(function () { runIfPresent(handle); }); | ||
}; | ||
@@ -104,6 +123,4 @@ } | ||
setImmediate = function() { | ||
var handle = addFromSetImmediateArguments(arguments); | ||
registerImmediate = function(handle) { | ||
global.postMessage(messagePrefix + handle, "*"); | ||
return handle; | ||
}; | ||
@@ -119,6 +136,4 @@ } | ||
setImmediate = function() { | ||
var handle = addFromSetImmediateArguments(arguments); | ||
registerImmediate = function(handle) { | ||
channel.port2.postMessage(handle); | ||
return handle; | ||
}; | ||
@@ -129,4 +144,3 @@ } | ||
var html = doc.documentElement; | ||
setImmediate = function() { | ||
var handle = addFromSetImmediateArguments(arguments); | ||
registerImmediate = function(handle) { | ||
// Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted | ||
@@ -142,3 +156,2 @@ // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called. | ||
html.appendChild(script); | ||
return handle; | ||
}; | ||
@@ -148,6 +161,4 @@ } | ||
function installSetTimeoutImplementation() { | ||
setImmediate = function() { | ||
var handle = addFromSetImmediateArguments(arguments); | ||
setTimeout(partiallyApplied(runIfPresent, handle), 0); | ||
return handle; | ||
registerImmediate = function(handle) { | ||
setTimeout(runIfPresent, 0, handle); | ||
}; | ||
@@ -154,0 +165,0 @@ } |
No README
QualityPackage does not have a README. This may indicate a failed publish or a low quality package.
Found 1 instance in 1 package
163
8558
3
1
0