JS promise libraries are slow because they're poorly factored and constrained by the limitations of the JS runtime environment and the low quality of typical JS code. Don't extrapolate from the miserable experience of using promises in JS to assume that promises are useless as a programming construct.
core.async looks interesting though; I assume I can't just consume it as a library and instead must rewrite my whole application in (clojurescript? you literally never mention in this post what language that is)? Too bad, but I can see how for this type of thing you need compiler support.