News for hackers. Stuff that matters.
Re:V8 adds support for top-level await by vidarh on Tuesday September 24, 2019 @10:17PM (#21066927)
You're reading too much into the example. Your 'database' can be your frontend js state. There is nothing in the example that limits the problem to backend development.
Re:V8 adds support for top-level await by jeswin on Tuesday September 24, 2019 @11:02PM (#21067191)
Yeah but the impact of race conditions on front-end code (which is always single user) is minimal; unlike the backend where it's catastrophic and not fixable by refreshing the page.
Re:V8 adds support for top-level await by vidarh on Wednesday September 25, 2019 @03:43AM (#21068660)
It is fixable by refreshing the page if there are no race conditions in the front-end.

If anything getting this right on the front-end is often extra problematic because of the high cost of round-tripping state to the server.

Re:V8 adds support for top-level await by olalonde on Wednesday September 25, 2019 @02:26AM (#21068228)
In that case, the code would be sync and there wouldn't be a "race condition".
Re:V8 adds support for top-level await by vidarh on Wednesday September 25, 2019 @03:45AM (#21068670)
I just the other day had to step in to deal with a race condition in a frontend caused by improperly handling async API requests.

It's dangerous to assume that just because JS has a single main thread that you don't need to think about sequencing of operations and locking.

Re:V8 adds support for top-level await by olalonde on Wednesday September 25, 2019 @06:57AM (#21069490)
While writing async code can indeed be challenging, I just disagree with the idea that JavaScript is lacking good "locking primitives":

> All this async code without decent locking primitives is leading to a rabbit hole of race conditions...

No, it's not. Here's a lock:

   let lock = Promise.resolve()
   // ...
   lock = lock.then(() => { /* critical section */ })
For the rare instances where more complex async flow control is required, there are a bunch of libraries for that (e.g. async[0], p-queue[1], etc.).

[0] https://caolan.github.io/async/v3/docs.html

[1] https://github.com/sindresorhus/p-queue