As it turns out, most people misunderstood my point. That’s probably my fault. Here is at again, more concisely:
If, like in my example, you do not plan ahead — and it turns out you need an asynchronous call somewhere, you have to go back and rewrite a lot of your code to use the asynchronous programming style.
The three tools I listed are ways around this problem. There you can keep writing your code in a synchronous style, no matter if you need an async call at some point.
Hope that clears things up.