I'm certainly no expert, but I expect the design choice was made to do it that way to make the C/C++ asynchronous calls within the node core to be simpler and easier. At present, to jump back into the callback the C++ side just needs a single function reference. If a list of arbitrary arguments are also allowed then these would also have to handled and tracked in the C++ code - not too difficult, but extra work nonetheless. So the current mechanism gives a cleaner separation between the Javascript and C++ worlds.
There is also the issue that the extra arguments will make it very difficult for the node api to have functions with optional arguments. On 12 December 2012 11:53, Michael Hasenstein <hasenst...@yahoo.com> wrote: > I know how I can do it (at least 3 different very ways came to my mind > immediately), I said so ;-) - that was't my question (or point). > > I don't WANT to have to write that, if I can help it. > > I would except the explanation that since node.js is very low-level > burdening the API functions with an additional 'if' to make it call > the callback with *optional* (that's what leads to the 'if') > parameters given to it for that purpose, and since the API functions > are possibly called millions of times per second, the decision was > made to burden the code using node.js instead of node.js. > > > > > On Wed, Dec 12, 2012 at 12:47 PM, Jonathan Dickinson > <jonathand...@gmail.com> wrote: > > You can do it with .bind(). I assume that the 1...n arguments of .bind() > are > > often overlooked. > > > > var fs = require('fs'); > > > > function onStat(file, err, stat) { > > if (stat.isFile()) { > > //fs.readFile(...)... WHICH FILE???? > > console.log(file); // This file > > } > > } > > > > var files = [ > > "E:\\site.css", > > "E:\\stacks.txt", > > "E:\\Node", > > ]; > > > > files.forEach(function (file) { > > fs.stat(file, onStat.bind(this, file)); > > }); > > > > On Wednesday, 12 December 2012 11:36:29 UTC+2, Michael Hasenstein wrote: > >> > >> This is not a technical question (I'm quite clear about how the stuff > >> works). I also did some (Google) research before asking. > >> > >> I'm just curious if there is a good reason that I just fail to see... I > AM > >> aware that very obviously I am not the first person to think about > this, but > >> I just could not find ANY good explanation for the "WHY". > >> > >> Let me just give an example. > >> > >> I get an array of strings (filenames, e.g. from fs.readDir), and now I > >> want to process them: fs.stat(), fs.readFile(), then minify, then > >> fs.writeFile(). > >> > >> now. all those operations are asynchronous unless I use the sync-version > >> of those functions. > >> > >> PROBLEM: > >> > >> I really, really, REALLY need that filename string it all started with > in > >> the other functions - so now, with node.js callback API being as it is, > I > >> have to write code that I really, REALLY dislike, because it seems > >> suboptimal compared to what I COULD do. > >> > >> What I COULD do but which the node.js callbacks don't allow is the > passing > >> of additional parameters to my callback. > >> > >> Code: > >> function onStat(err, stat) { > >> if (stat.isFile()) { > >> //fs.readFile(...)... WHICH FILE???? > >> } > >> } > >> > >> files.forEach(function (file) { > >> fs.stat(<some path> + file), onStat); > >> }); > >> > >> I AM AWARE HOW TO SOLVE THIS. Pls. don't reply showing me how I can > easily > >> solve this with additional function scopes. > >> > >> My issue with adding additional functions is that that solution SUCKS. > If > >> I could just add additional parameters to the fs.stat() call which my > >> callback gets as 3rd, 4th, etc parameter (or an array or an object, > >> whatever) the sun would still shine. > >> > >> However, node.js makes me add additional quite useless scopes. > >> ALTERNATIVELY I write all those callback functions into the lexical > scope of > >> the forEach() - that's what has been called "callback hell" for a long > time > >> - no way. > >> > >> So, can anyone enlighten me - and I MAY INDEED be simply incredibly > stupid > >> not to see the point without help - why node.js could not just let me > add > >> custom parameters for callbacks? Again: additional scope-producing > functions > >> are NOT OPTIMAL IMHO - it produces overhead both in the code and during > >> runtime. There MUST be a reason, otherwise by now, node.js almost at > version > >> 0.9, would have been changed, wouldn't it? I mean, libraries like YUI3 > give > >> me the option to add my own custom parameters to be passed down to > callback > >> functions, to solve this exact problem. > >> > >> TIA! > >> > > -- > > 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 > -- 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