And provided the various methods return promises each "then" will be called once the previous bit of functionality has finished running, allowing them to be chained together really easily.
C# uses async/await for make things easy too.
Java, on the other hand, has "Future
You'd think that "Do X, and then when X is done, do Y" would be a basic requirement for any kind of asynchronous processing, but apparently the Java library creators disagree...
Original post on Dreamwidth - there are comments there.