Skip to content

Instantly share code, notes, and snippets.

@nowelium
Created January 13, 2012 03:05
Show Gist options
  • Star 7 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save nowelium/1604371 to your computer and use it in GitHub Desktop.
Save nowelium/1604371 to your computer and use it in GitHub Desktop.
CountdownLatch
var CountdownLatch = function (limit){
this.limit = limit;
this.count = 0;
this.waitBlock = function (){};
};
CountdownLatch.prototype.countDown = function (){
this.count = this.count + 1;
if(this.limit <= this.count){
return this.waitBlock();
}
};
CountdownLatch.prototype.await = function(callback){
this.waitBlock = callback;
};
var barrier = new CountdownLatch(2);
setTimeout(function (){
console.log('work A');
barrier.countDown();
}, 100);
setTimeout(function (){
console.log('work B');
barrier.countDown();
}, 200);
console.log('wait for all to finish...');
barrier.await(function(){
console.log('done all');
});
==>
wait for all to finish...
work A
work B
done all
@noamtamim
Copy link

@herrgrossmann this is great, thanks! Maybe publish to NPM?

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