Take a look at NarrativeJS:
Narrative JavaScript is a small
extension to the JavaScript language
that enables blocking capabilities for
asynchronous event callbacks. This
makes asynchronous code refreshingly
readable and comprehensible.
With Narrative JavaScript fetching a document using XmlHttp goes from looking like this:
function handleResponse(responseText) {
document.getElementById("myElem").innerHTML = responseText;
}
fetch("http://www.url.com/", handleResponse);
to this:
document.getElementById("myElem").innerHTML = fetch->("http://www.url.com/");
Too bad the project is no longer active :-(
dojo.Deferred() also seems to implement an async monad, though the syntax is not as clear as NarrativeJS.
There has been some work on bringing async sugar to CoffeeScript, but ultimately it wasn't accepted.
RxJS is another one that deals with this.