Well look at Erlang/Elixir. Async everything is fine if your language is immutable and has preemptable execution.
You just write code, and the system figures out how to break things up.
But that’s a system that was designed from the ground up to be async. In JavaScript it was added after the fact, and you as a programmer have to deliberately annotate your functions to be aware of what is and isn’t async.