It's not that Javascript is especially suited to this model, but thanks to the browser, it was already the most used implementation of this model.
But it was the broad availability of mindshare of those developers who at least knew some JS that really kicked it over the top, given JS as a DSL for I/O bound applications.
Underscore, Flux, promises.js, Async, Angular, Node fibers, Step...
How much is all this abstraction costing us, both in terms of computation time and developer time (both writing and debugging)?
We're in something of a JS framework boom (or hell, if you wish) right now. These people are developing as if their shit libraries won't exist in 3 years. Hence, the total lack of documentation and ongoing maintenance from so many of them. I've already had to maintain code that used abandoned JS frameworks. I'm a little scared of what's around the corner here...