Promises, Promises

A frequent topic for developers (particularly in JavaScript) is "promises." Put simply, it's another way to tackle asynchronous programming.  Asynchronous programming is kind of a Big Deal - it's important for end user applications because users want to do keep doing things (e.g. reading email) while waiting for things to happen (e.g. downloading more email).  It's also a really big deal for server applications - obviously, a server needs to be able to handle lots of users, but that server also may be doing things (e.g. checking three different database systems) that would be a lot faster asynchronously.  Oh, and as we add more and more cores instead of just making faster chips, software runs faster everywhere if it can take advantage of those cores.  That affects EVERYTHING - from your phone, to your gaming console, to your laptop.

One minor detail: asynchronous programming has traditionally been a giant pain.

So, with that in mind, here's a very nice introduction to JavaScript promises.

For comparison, check out Akka, the REST client stack in DropWizard, the jQuery promise, and the Java 7 fork/join.

What other asynchronous programming models have you seen or used?  And for bonus points: how do you test and debug async code?