Skip to content

Instantly share code, notes, and snippets.

@arcanis
Created April 26, 2016 14:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save arcanis/c07806cbb908050a9587e60a9e5e7ef0 to your computer and use it in GitHub Desktop.
Save arcanis/c07806cbb908050a9587e60a9e5e7ef0 to your computer and use it in GitHub Desktop.
let refCount = 0;
let resolvers = [];
function resolveAll() {
for (let resolve of resolvers)
resolve();
resolvers = [];
}
function checkRefCount() {
if (refCount > 0)
return ;
resolveAll();
}
function checkBrowserIdle() {
if (window.requestIdleCallback) {
window.requestIdleCallback(checkRefCount);
} else {
window.setTimeout(checkRefCount, 0);
}
}
export async function requestIdle() {
return new Promise(resolve => {
resolvers.push(resolve);
checkBrowserIdle();
});
}
requestIdle.increaseRefCount = () => {
refCount += 1;
};
requestIdle.decreaseRefCount = () => {
refCount -= 1;
checkBrowserIdle();
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment