1. A general solution for handling async should be composable, in that it should model return values and eventual failures in a way that is flat and repeatable, halting is just too primitive to be practical for these things, promises allows us to not care about whether or not it's async since it has the composable property.
2. I won't.
3. Lots of things, safety for instance.
4. I won't, and rest of JS community won't either.