Skip to content

Instantly share code, notes, and snippets.

@nikcorg
Created July 9, 2013 16:49
Show Gist options
  • Save nikcorg/5959044 to your computer and use it in GitHub Desktop.
Save nikcorg/5959044 to your computer and use it in GitHub Desktop.
A naive and simple experiment at setImmediate/clearImmediate polyfilling
(function (global, rand) {
var prefix = "setImmediate-";
var counter = 0;
var tasks = {};
global.setImmediate = function (cb, params) {
var id = prefix + counter++ + rand();
tasks[id] = {
fn: cb, p: params || []
};
window.postMessage(id, "*");
};
global.clearImmediate = function (cb) {
Object.keys(tasks).some(function (key) {
var task = tasks[key];
if (task && task.fn === cb) {
delete tasks[key];
return true;
}
return false;
});
};
runTask = function (e) {
var task;
if (! e.data.substr(0, prefix.length) === prefix) {
return;
}
task = tasks[e.data];
if (! task || typeof task.fn !== "function") {
return;
}
task.fn.apply(global, task.p);
delete tasks[key];
};
global.addEventListener("message", runTask, false);
}(window, Math.random));
@nikcorg
Copy link
Author

nikcorg commented Jul 9, 2013

On MS's demo for the setImmediate API copy and paste the following snippet to your console, then run the setImmediate version of quicksort

(function (g,s,d) {
    with (s) {
        src="https://gist.github.com/nikcorg/5959044/raw/82dad99f36f7787d26c69a7eb0179a19ab4fe11d/setimmedate.js";
        type="text/javascript";
        onload=function(){g.msSetImmediate=g.setImmediate;};
    }
    d.appendChild(s);
    g.browserSupportsSetImmediate=true;
}(window,document.createElement("script"),document.body));

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment