Hacker News new | ask | show | jobs
by bwindels 3519 days ago
IIRC the main reason indexeddb does not use promises is because promises are required to reject/resolve asynchronously [1]. Indexeddb requires that you manipulate the object stores in a synchronous way from it's event handlers, so it can terminate the transaction after running the event handlers synchronously. It can't do this with promises that will run their resolve handler at best in the next microtask.

It's been a while since I looked into this, but I remember this being my conclusion.

1: https://promisesaplus.com/#point-34

2 comments

That's actually not true in Chrome https://bugs.chromium.org/p/chromium/issues/detail?id=457409 although it's not clear if that is a bug in Chrome or in other browsers. It would be nice to have more clarity on that, or an explicit promise API like https://github.com/inexorabletash/indexeddb-promises because until then it's really shitty to use - you have to constantly worry about cross-browser compatibility.
I understand the transactional requirements but AFAIK most IDB operations are already async. Open for example:

https://developer.mozilla.org/en-US/docs/Web/API/IDBFactory/...

"The method returns an IDBOpenDBRequest object immediately, and performs the open operation asynchronously."