34 lines
734 B
JavaScript
34 lines
734 B
JavaScript
"use strict";
|
|
|
|
var timeouts, messageName;
|
|
|
|
// node.js
|
|
if (typeof process === "object" && typeof process.nextTick === "function") {
|
|
module.exports = process.nextTick;
|
|
}
|
|
// some browsers
|
|
else if (typeof setImmediate === "function") {
|
|
module.exports = setImmediate;
|
|
}
|
|
// most other browsers
|
|
else {
|
|
timeouts = [];
|
|
messageName = "zero-timeout-message";
|
|
window.addEventListener("message", handleMessage, true);
|
|
|
|
module.exports = function (fn) {
|
|
timeouts.push(fn);
|
|
window.postMessage(messageName, "*");
|
|
};
|
|
}
|
|
|
|
function handleMessage(event) {
|
|
if (event.source == window && event.data == messageName) {
|
|
event.stopPropagation();
|
|
if (timeouts.length > 0) {
|
|
var fn = timeouts.shift();
|
|
fn();
|
|
}
|
|
}
|
|
}
|