This post originated from an RSS feed registered with Agile Buzz
by Martin Fowler.
Original Post: Bliki: JavascriptPromise
Feed Title: Martin Fowler's Bliki
Feed URL: http://martinfowler.com/feed.atom
Feed Description: A cross between a blog and wiki of my partly-formed ideas on software development
In Javascript, promises are objects which represent the pending result of
an asynchronous operation. You can use these to schedule further
activity after the asynchronous operation has completed by supplying
a callback.
aPromise = someAsyncOperation();
aPromise.done(function() {
// runs if all went well
});
aPromise.fail(function() {
// runs if something went wrong
});
aPromise.always(function() {
// runs either way
});
As well as providing a clear interface to schedule activity
with asynchronous tasks, they also compose.
In this form (using jQuery promises) the composed promise will
run its done handlers when all the passed promises succeed and its
fail handlers if any of them fail.
There are various forms of promises in javascript, annoyingly
they have subtly different APIs and vocabularies. Probably the
most used is jQuery's
Deferred Object.
You also hear these concepts described as futures and
deferreds. These concepts appear in many languages,
not just javascript, often with concurrency in mind as much as
asynchrony.
For more information I suggest getting a copy of Trevor
Burnham's Async JavaScript. If you
want a web article, I found Burnham has a short
but useful article summarizing them.