1) Yesterday asynchronous code used callbacks, which led to callback hell. 2) Today Promises provide a better solution but still have issues. 3) Tomorrow Generators may help make asynchronous code look synchronous but have limitations and require wrappers. 4) The day after tomorrow, ES7 async/await promises to solve asynchronous code issues in an elegant way similar to synchronous code but it is still early in development.