Skip to content

Instantly share code, notes, and snippets.

@jussi-kalliokoski
Created January 17, 2012 19:09
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 jussi-kalliokoski/7c5e476e056800f94493 to your computer and use it in GitHub Desktop.
Save jussi-kalliokoski/7c5e476e056800f94493 to your computer and use it in GitHub Desktop.
Non-blocking sleep semantics for JS
function loadImages (...images) {
var imagesToLoad = images.length;
var ready = return function;
function imageReady () {
if (!--imagesToLoad) {
ready(null, images);
}
}
function imageError (e) {
ready(e);
}
images = images.map(function (src) {
var img = new Image();
img.src = src;
img.onload = imageReady;
img.onerror = imageError;
return img;
});
}
try {
let [foo, bar, chuck] = loadImages('foo.gif', 'bar.png', 'chuck.jpg');
console.log('All images loaded');
} catch (e) {
console.error('There was an error loading an image:', e);
}
function loadImages (...images) {
var imagesToLoad = images.length;
var ready = return function;
function imageReady () {
if (!--imagesToLoad) {
ready(null, images);
}
}
function imageError (e) {
ready(e);
}
images = images.map(function (src) {
var img = new Image();
img.src = src;
img.onload = imageReady;
img.onerror = imageError;
return img;
});
finally yield ready;
}
try {
let [foo, bar, chuck] = yield loadImages('foo.gif', 'bar.png', 'chuck.jpg');
console.log('All images loaded');
} catch (e) {
console.error('There was an error loading an image:', e);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment