I liked the writeup! In my experience, JavaScript Promise (mis)use can share some of these mistakes too—they're probably inherent to the synchronous->asynchronous learning process.
In JS an await is just syntactic sugar around a then() on a promise. The Await in the article is a method to block the thread until a promise resolves, there is no equivalent in JS.
.NET has a similar mechanism with Task.Result with similar pitfalls