-
-
Save klovadis/2549131 to your computer and use it in GitHub Desktop.
// example function where arguments 2 and 3 are optional | |
function example( err, optionalA, optionalB, callback ) { | |
// retrieve arguments as array | |
var args = []; | |
for (var i = 0; i < arguments.length; i++) { | |
args.push(arguments[i]); | |
} | |
// first argument is the error object | |
// shift() removes the first item from the | |
// array and returns it | |
err = args.shift(); | |
// last argument is the callback function. | |
// pop() removes the last item in the array | |
// and returns it | |
callback = args.pop(); | |
// if args still holds items, these are | |
// your optional items which you could | |
// retrieve one by one like this: | |
if (args.length > 0) optionalA = args.shift(); else optionalA = null; | |
if (args.length > 0) optionalB = args.shift(); else optionalB = null; | |
// continue as usual: check for errors | |
if (err) return callback(err); | |
// for tutorial purposes, log the optional parameters | |
console.log('optionalA:', optionalA); | |
console.log('optionalB:', optionalB); | |
/* do your thing */ | |
} // example() | |
// invoke example function with and without optional arguments | |
example(null, function (err) { /* do something */ }); | |
example(null, 'AA', function (err) {}); | |
example(null, 'AAAA', 'BBBB', function (err) {}); |
@adrianblynch That's only the case if optional_1
and optional_2
are independent. If you structure your inputs to function
in such a way where optional_2
can be present only if optional_1
is present (even if that requires sending function(required, null, optional_2, required)
, you don't have to worry about that.
If the signature is function(required, optional_1, optional_2)
where optional_1
and optional_2
are independent of each other and you pass in function(required, optional_2)
, unless you design your input to match specific unique criterion, you're right: there's no way to for the function know that you mean optional_2
instead of optional_1
.
Long Story Short: design your function to require optional_1
in order to accept optional_2
.
Cool. Thanks!
I get Error: SyntaxError: Unexpected string
where the arguments
is used. If i remove it, everything seems to work fine. Any help please? Thanks
thanks
Thank you @klovadis and @rossipedia !
How do you know if optionalA or optionalB is intended?
If your pattern is
function(required, optional, required)
orfunction(required, optional, optional)
I think it's OK to deal with those the way you have or any other way, but if you have a funcation signature likefunction(required, optional_1, optional_2, required)
you have no way of telling what the user meant to send,function(required, optional_1, required)
orfunction(required, optional_2, required)
Or have I missed something?