JavaScript had the advantage that is was async first (it started with callback-style APIs, but they can be converted to Promises).
In Rust, this is not the case and leads to fragmentation.
There are a lot of high-quality libraries which cannot be efficiently used in an async context (e.g. Diesel). And since Rust isn't shipped with a default runtime (tokio, async-std, ...), some crates are incompatible with the rest of your program. I understand the reasoning (there is no "one size fits all") but it makes things more complicated.