Why does it fail?
On Wed, Nov 14, 2012 at 4:02 PM, Adam Crabtree <[email protected]> wrote: > You missed the point of the example about domain nesting failing. > > `err.errors` is a mongoose thing, not a trycatch thing. It was my attempt > at a plausible uncaught exception in the strained example. The original > gist was correct: > https://gist.github.com/4075562/4c0e389da3e15048c2c99629eca28b8d96a7ebad > > Nonetheless, the point stands that domain nesting doesn't work and the > process dies if you have an async error in a callback coming from a library > that uses domains, and had any sort of internal failure, a use-case in > which trycatch handles seemlessly. > > Or to put it another way, it's not possible with domains (AFAIK) for > `domainFoo` to return an Error to its callback if the 3rd-party library > uses domains to return async errors, and as I mentioned in the other > thread, this is my primary use-case for async error-handling. > > Also, FWIW, I'm highly critical of domains for all the reasons stated > above, but I also very much want a solution to the problem they solve. My > recommended solution (with code) is trycatch, and as you can see from this > thread, I'm not the only one that would prefer a much cleaner, simpler > solution to error handling in node.js. > > That being said, I think node.js' error handling problem boils down to an > inability to catch asynchronous exceptions reliably, something > that's exacerbated by the lack of maturity of most 3rd-party libraries and > node.js' threadlessness and concurrency. uncaughtException is insufficient > as it loses context, and domains (at least currently) are insufficent for > the reasons stated above. > > Cheers, > Adam Crabtree > > > On Wed, Nov 14, 2012 at 3:37 PM, Forrest L Norvell > <[email protected]>wrote: > >> On Wednesday, November 14, 2012 at 3:26 PM, Adam Crabtree wrote: >> >> FWIW, this is exactly why I built trycatch ( >> https://npmjs.org/package/trycatch). trycatch works for all the use >> cases listed here: >> >> * Call once, and all proceeding async calls and uncaught exceptions are >> properly handled >> * Nesting works as expected (exactly how nesting synchronous try/catch >> blocks would behave) >> * Not reliant on 3rd party modules to implement in order to work >> * Long stack traces >> * Works properly with EventEmitter >> >> Granted, trycatch ATM doesn't offer the resource cleanup, but in theory >> it could be combined with domains to accomplish this just fine. I may do so >> when I get the chance now that domains are little more stable, assuming >> they wouldn't interfere. In the other thread you mentioned above ( >> https://groups.google.com/forum/?fromgroups#!topic/nodejs/RphMf98jcgA) >> where I'm discussing a few of these things, I included the following >> example where domain nesting fails, but succeeds just fine with trycatch: >> >> https://gist.github.com/4075399 >> >> Nothing against domains. I just find them to be cumbersome and to not >> solve the problems I face, esp. wrt. libraries not properly handling >> Errors/exceptions. >> >> I made a few changes to your gist (the error wasn't getting handed off >> properly, and the domain error-handling code was looking for the properties >> that trycatch adds to the Error object): >> >> https://gist.github.com/4075562 >> >> In this example, everything behaves as it should (I believe) -- domainFoo >> calls thirdPartyFoo, so thirdPartyFoo's domain is active when the error is >> raised, and handles it, and then the callbacks are invoked, with the error >> ending up in the callback passed to domainFoo, as it should. Did my changes >> alter the point you were trying to make? If so, how? >> >> F >> >> -- >> Job Board: http://jobs.nodejs.org/ >> Posting guidelines: >> https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines >> You received this message because you are subscribed to the Google >> Groups "nodejs" group. >> To post to this group, send email to [email protected] >> To unsubscribe from this group, send email to >> [email protected] >> For more options, visit this group at >> http://groups.google.com/group/nodejs?hl=en?hl=en >> > > > > -- > Better a little with righteousness > than much gain with injustice. > Proverbs 16:8 > > -- > Job Board: http://jobs.nodejs.org/ > Posting guidelines: > https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines > You received this message because you are subscribed to the Google > Groups "nodejs" group. > To post to this group, send email to [email protected] > To unsubscribe from this group, send email to > [email protected] > For more options, visit this group at > http://groups.google.com/group/nodejs?hl=en?hl=en > -- Job Board: http://jobs.nodejs.org/ Posting guidelines: https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines You received this message because you are subscribed to the Google Groups "nodejs" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/nodejs?hl=en?hl=en
