The bind part is more controversial. I can't recall why I decided to bind the function to the connectionState object instead of passing it as an argument. I'm open to discussion on that; passing it as an argument is obviously easier to test... I would have had to bind it to this and pass both arguments or use async.apply without a binding. Maybe I started with the former and then decided to get rid of the this and bind to the first argument directly...only God knows.