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.
