oh, you would have to assign the 'drain' listener after you've decided to exit.


On Mon, Jul 16, 2012 at 3:56 PM, Alan Gutierrez <a...@prettyrobots.com> wrote:
> On Mon, Jul 16, 2012 at 01:25:50PM +1200, Dominic Tarr wrote:
>> On Mon, Jul 16, 2012 at 6:18 AM, Alan Gutierrez <a...@prettyrobots.com> 
>> wrote:
>> > I'm writing command line utilities in Node.js. Here's a snippet that is
>> > a source of some concern for me.
>> >
>> >     try {
>> >       options = require('arguable')(__filename);
>> >     } catch (error) {
>> >       console.error('error: ' + e.message);
>> >       console.error(e.usage);
>> >       process.exit(1);
>> >     }
>> >
>> >     frobinate(options.severity);
>> >
>> > Essentially, I'm calling an options parser and finding errors that
>> > prevent me form continuing. I want to exit with a non-zero exit code.
>> >
>> > However, if I exit abruptly, I find that the console is not always
>> > flushed. Sometimes on Windows. Sometimes when piping stderr.
>> >
>> > I'm wondering when I can count on a flush of stderr before exit, when I
>> > can't, and what you feel is the right way to exit from a command line
>> > program, if you have any thoughts on the matter.
>> >
>> > Currently, I'm creating a main function, surrounding that in a try/catch
>> > block, and throwing special exceptions to indicate that the error does
>> > not involve a stack trace.
>
>> you can throw anything in js, even an empty string.
>> (a good way to break a test framework)
>>
>> would this work?
>>
>> stderr.on('drain', function () {
>>   process.exit(1)
>> })
>>
>> console.error('fail')
>
> Wouldn't that abruptly exit the program the first time stderr drains? I
> imagine that it drains multiple times during the life of the program, if
> I write warnings while running.
>
> Currently, I'm doing...
>
>   try {
>     main();
>   }  catch (e) {
>     if (e.code != null && !isNaN(e.code))
>       process.on('exit', function () { process.exit(e.code) });
>     else
>       throw e;
>   }
>
> But, I'm trying to imagine situations where catching that error in that
> way will cause the program to keep on going, instead of petering out.
>
> --
> Alan Gutierrez - http://github.com/bigeasy - http://twitter.com/bigeasy
>
> --
> 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 nodejs@googlegroups.com
> To unsubscribe from this group, send email to
> nodejs+unsubscr...@googlegroups.com
> 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 nodejs@googlegroups.com
To unsubscribe from this group, send email to
nodejs+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/nodejs?hl=en?hl=en

Reply via email to