I have wasted hours understanding the subtlety of promises chaining. On that kind of “obvious once you know it problem” I think its worth sharing, not because I made a ground breaking discovery per se, but it can help you to get your “aha!” moment a bit earlier if you are new to promises.
What you should know
Promises let you organize asynchronous operations chaining like this.
var promise = asyncThatReturnPromise1();
promise.then(function() {
return asyncThatReturnPromise2();
}).then(function() {
return asyncThatReturnPromise3();
});
Which generates a succession of calls:
--- call1 --->|
|--- call 2 --->|
|--- call 3 --->
The catch is that the promise returned by then()
is not the initial one
just returned for the purpose of chaining. Something you could expect
from others library behavior like JQuery.
It’s a brand new promise based on the return of the callback you have just
defined.
Which means what could looks as the same code, will launch parallel some processing:
var promise = asyncThatReturnPromise1();
promise.then(function() {
return asyncThatReturnPromise2();
});
promise.then(function() {
return asyncThatReturnPromise3();
});
--- call1 -->|
|--- call 2 ---->
|--- call 3 -->
Test it by yourself
A few lines of CoffeeScript are on GitHub.
Conclusion
I would not blame the conception of this feature. To my opinion, it is the best way one can achieve the combination of sequenced and parallel in some standard way. I would just have liked to know this earlier, this left me with pretty weird first experience with promises.