Earlier quoted context omitted.
What makes you assume z3t4 exhaustively tried every other language before settling on JS? It's not typical that you present your opinion of a tv show by giving the few unique positive traits it has in contrast to the union of all positive traits from tv shows in the same genre. You just watch the show on a micro level, record what you liked about it, and report that, regardless of what the macro landscape looks like.…
> What makes you assume z3t4 exhaustively tried every other language before settling on JS? My point was that you'd be hard pressed to find a popular programming language that does not support those features.
I can think of JS, Go, and Erlang.
The rest, you are stuck interoperating sync and async code. Like having a Twisted/Tokio event loop embedded somewhere in your Python/Rust program and thinking very, very hard about how your blocking calls are not blocking your async runtime, like passing around an I/O thread pool and ensuring it cannot be starved.
I wouldn't be so quick to dismiss it, much less as something that every other language has.
But I have noticed that it's not something you necessarily appreciate until you've written async systems in languages with blocking APIs.
In another comment you point out that Java has promises, so who cares if JS has them. As if the hard part of straddling async/sync ecosystems is whether there exists a concurrency primitive at all.
Even Go programmers should be able to look at their WaitGroup code and have some envy when they see:
Promise.map(things, (thing) => process(thing), { concurrency: 4 })
I think our propensity to miss the light of other languages/ecosystems is a reminder of how little breadth of experience we actually have across the field.It's kind of like how the person that seems to have the most negative views of other people is likely to be the person who has least left their hometown -- it's just how humans are.