I have wasted hours understanding the subtlety of promises chaining. I think its worth sharing.
The article is available on my blog
To make it work
If you don't have it ready install coffee script:
npm install -g coffee-script
Then in the project folder:
To check what can be confusing look at the file and call them through:
coffee expected.coffee coffee whatididntexpected.coffee