- From: Alex Russell <slightlyoff@google.com>
- Date: Thu, 9 May 2013 02:51:47 +0100
- To: Boris Zbarsky <bzbarsky@mit.edu>
- Cc: "public-script-coord@w3.org" <public-script-coord@w3.org>
- Message-ID: <CANr5HFVaaEhRee8q44G==WeB3EV4ZStHYF84XyL17_xkPqQ1yQ@mail.gmail.com>
On Wednesday, May 8, 2013, Boris Zbarsky wrote: > On 5/7/13 9:27 PM, Sean Hogan wrote: > >> a. Queueing a task - that is, asynchronously executing a function >> > > setTimeout does this, no? If we really feel that the minimum 4ms delay it > imposes is not OK, there have been proposals for a setImmediate, though I'd > like to see some indication that it won't be abused like setTimeout has > been. > My polyfill uses Object.observe() & Mutation Observers to get shorter callback timeouts where that's possible, falling back to setTimeout elsewhere. I'm not sure we really need to do any more than that. > b. Isolating a task - that is, synchronously executing a function in >> such a way that errors are detected but not prevented from going to the >> console >> > > This is also already possible, as far as I can tell, modulo a slight bug > in Chrome. Consider this testcase: > > <script> > function isolate(f) { > try { > f(); > } catch (e) { > setTimeout(function() { throw e; }, 0); > } > } > function g() { > nonexistent(); > } > isolate(g); > </script> > > The "nonexistent()" call is on line 10; the throw statement on line 6. The > question is what goes to the console. > > In Firefox, I get: ReferenceError: nonexistent is not defined @ > file:///whatever.html:10 > > In Chrome I get: Uncaught ReferenceError: nonexistent is not defined. > whatever.html:10 (though only if the console is open before I run the > testcase; if I open it after running the testcase, Chrome gets the line > number wrong and claims it was on line 6). > > In Opera I get: Uncaught exception: ReferenceError: Undefined variable: > nonexistent > Error thrown at line 6, column 43 in <anonymous function>() in > whatever.html: > throw e; > Error initially occurred at line 10, column 4 in g() in whatever.html: > nonexistent(); > > In Safari I get: ReferenceError: Can't find variable: nonexistent. > whatever.html:10 > > In IE9 I get: SCRIPT5009: 'nonexistent' is undefined > whatever.html, line 10 character 5 > > If synchronous reporting to the console is desired, that should also be > possible, actually, like so: > > var reporter = document.createElement("div"); > function isolate(f) { > try { > f(); > } catch (e) { > reporter.onclick = function() { throw e; }; > reporter.dispatchEvent(new Event("click")); > } > } > > (with createEvent and whatnot as needed for older UAs). > > -Boris > >
Received on Thursday, 9 May 2013 01:52:14 UTC