These answers, including the selected answer, are good for introducing promises
conceptually, but lacking in specifics of what exactly the differences are in
the terminology that arises when using libraries implementing them (and there
are important differences).
Since it is still an evolving spec, the answer currently comes from attempting to survey both references (like wikipedia) and implementations (like jQuery):
-
Deferred: Never described in popular references,
1
2
3
4
but commonly used by implementations as the arbiter of promise resolution (implementingresolve
andreject
).
5
6
7
Sometimes deferreds are also promises (implementing
then
),
5
6
other times it’s seen as more pure to have the Deferred only
capable of resolution, and forcing the user to access the promise for
usingthen
.
7
-
Promise: The most all-encompasing word for the strategy under discussion.
A proxy object storing the result of a target function whose
synchronicity we would like to abstract, plus exposing athen
function
accepting another target function and returning a new promise.
2
Example from CommonJS:
> asyncComputeTheAnswerToEverything() .then(addTwo) .then(printResult); 44
Always described in popular references, although never specified as to
whose responsibility resolution falls to.
1
2
3
4
Always present in popular implementations, and never given
resolution abilites.
5
6
7
-
Future: a seemingly deprecated term found in some popular references
1
and at least one popular implementation,
8
but seemingly being phased out of discussion in preference for the term
‘promise’
3
and not always mentioned in popular introductions to the topic.
9
However, at least one library uses the term generically for abstracting
synchronicity and error handling, while not providingthen
functionality.
10
It’s unclear if avoiding the term ‘promise’ was intentional, but probably a
good choice since promises are built around ‘thenables.’
2
References
- Wikipedia on Promises & Futures
- Promises/A+ spec
- DOM Standard on Promises
- DOM Standard Promises Spec WIP
- DOJO Toolkit Deferreds
- jQuery Deferreds
- Q
- FutureJS
- Functional Javascript section on Promises
- Futures in AngularJS Integration Testing
Misc potentially confusing things
-
Difference between Promises/A and Promises/A+
(TL;DR, Promises/A+ mostly resolves ambiguities in Promises/A)