Re:V8 adds support for top-level await
by hombre_fatal on Tuesday September 24, 2019 @08:32PM
(#21066315)
I don't think it really makes sense to essentially say "Javascript is rife with race conditions like any other language" just because yes, you still need to use transactions when using a database.
[ Parent
| on HN ]
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.
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.).