There's no magic bullet to stop asynchronous code complexity, but some approaches are drastically more effective. Here are 4 types of "time travel" I use.
Asynchronous data loading is great for frontend apps—but it's difficult for unit tests. Your app is depending on a network that doesn’t exist during tests.
Protractor and WebDriverJS's ControlFlow allows us to write our own asynchronous functions that can be used from our tests with a synchronous style.
Using Python's new asyncio library, we see how coroutines dramatically simplify asynchronous networking code vs. callback-based asynchronous implementation.
How to easily chain asynchronous operations in iOS using ReactiveCocoa.