What's the difference from a someFunction(foo, xie(2, callbackFn))
pattern that doesn't pollute Function.prototype?

2013/3/20 Ken <[email protected]>:
> I've been writing a bunch of shell-script-like node scripts lately.  These
> mostly call a series of async functions that take the usual function (error,
> data) { ... } callback, and generally they handle any error along the way by
> logging it and exiting.  Here's a naive example using aws-sdk to make a
> couple EC2 API calls in serial
>
> var AWS = require("aws-sdk");
>
> var ec2 = new AWS.EC2.Client();
>
> ec2.runInstances({ ... }, function (error, runInstancesResponse) {
>   if (error) {
>     console.log(error);
>     process.exit(1);
>   } else {
>     // ... get the instanceIds from response as input to createTags
>     ec2.createTags({ ... }, function (error, createTagsResponse) {
>       if (error) {
>         console.log(error);
>         process.exit(2);
>       } else {
>           // ... do further processing ...
>       }
>     });
>   }
> });
>
> As you can see a lot of the total lines are just totally boilerplate if
> (error) barf.  Since we've got a functional language here, pretty easy to
> encapsulate that, e.g. with this
>
> Function.prototype.xie = Function.prototype.exitIfError = function
> (exitCode) {
>   var f = this;
>   return function (error, data) {
>     if (error) {
>       console.log(error);
>       process.exit(exitCode || 1);
>     } else {
>       f.call(this, data);
>     }
>   };
> }
>
> our code collapses to just
>
> ec2.runInstances({ ... }, function (runInstancesResponse) {
>   // ... get the instanceIds from response as input to createTags
>   ec2.createTags({ ... }, function (createTagsResponse) {
>     // ... do further processing ...
>   }.xie(2));
> }.xie(1));
>
> Which feels a lot more readable to me.  Is there precedent for this
> technique? A name for it? Any well known modules that implement it?  Any
> obvious horrible side effects?  Clearly not applicable to sophisticated
> error handling, but for this basic "it all works or just give up" kind of
> thing it seems handy.  Could add "abort if error", "throw if error", "emit
> if error" flavors as well.
>
> --
> --
> 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
>
> ---
> You received this message because you are subscribed to the Google Groups
> "nodejs" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/groups/opt_out.
>
>

-- 
-- 
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

--- 
You received this message because you are subscribed to the Google Groups 
"nodejs" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to