- From: Tab Atkins Jr. <jackalmage@gmail.com>
- Date: Mon, 22 Apr 2013 10:31:28 -0700
- To: Boris Zbarsky <bzbarsky@mit.edu>
- Cc: public-webapps <public-webapps@w3.org>
On Mon, Apr 22, 2013 at 10:17 AM, Boris Zbarsky <bzbarsky@mit.edu> wrote: > On 4/22/13 12:47 PM, Tab Atkins Jr. wrote: >> As long as you don't spin the event loop > > That's tricky. Here's some simple code at global scope: > > > request = indexedDB.open('database'); > request.onsuccess = function () {}; > > Can that code spin the event loop between the open() call and the onsuccess > setter being invoked? > > Sure: all it takes is someone defining a setter for "request" on the window > that just saves the given value and a getter for "request" that calls > showModalDialog to ask the user whether to allow the get and then returns > the saved value. > > Now why someone would do that, I have no idea, but that's true for a lot of > things people do in practice in websites. ;) My point is that whether the > event loop spins is a very non-local property of the code. It's annoying to > have to depend on such things. > > Is there a reason to not pass the success/error/upgradeneeded callbacks in a > dictionary to open() in this case, so that the request object is born with > the right bits and the actual reques it not kicked off until _after_ the > side-effects of getting them off the dictionary have fully run to > completion? Dunno, ask sicking. But events do have some benefits over passed callbacks. (The right answer is to figure out some way to accommodate IDB's locking semantics in a future. sicking and annevk have some discussion on this. Then there's no possibility of event races, because your callback will still be fired even if you lose the race.) >> This... is precisely the sort of thing that you shouldn't do. Just >> don't do this, and you're golden. > > I don't believe you are; see above. > > >> The "request.execute()" is more or less implied by hitting the bottom >> of your function, when it returns control back to the browsers. > > We wish; see above. Synchronously spinning the event loop is the devil. :/ ~TJ
Received on Monday, 22 April 2013 17:32:15 UTC