On Tue, Oct 8, 2013 at 12:52 AM, jeevan kk <[email protected]> wrote:
> > > On Tuesday, 8 October 2013 11:13:24 UTC+5:30, Mark Hahn wrote: >> >> > a connect is successfully fired and after that an error is being fired >> >> I don't see why these multiple callbacks are a problem. They are >> happening exactly as they are supposed to if they are actually convenience >> callbacks for event emitters like http.createServer. You should handle >> each type of event appropriately. >> >> > @Mark > > Yes I agree to it. But think like its a module to execute a mysql query. > So you are using a function *execute() *to execute a query. As an user > why will you expect your callback to be called multiple times? If there is > a error it should call it will an error or inform its successfully > executed. It shouldn't say the query is successfully executed and later > call the callback again with the error. Doesn't it make sense? Please > correct me if I am wrong. I am new to Nodejs > > Yes, you're right. Async functions (the kind that have (err, value) callback as the last arg in node) should call the callback exactly once, either with an error or a value. I think what Mark is trying to say is that sometimes functions are used as first-class values in cases other than the continuation to some async operation. If I pass in a function as the event listener for some event that can happen zero or more times, I expect my function to be called zero or more times. This is natural. Sometimes functions are used for things that have nothing to do with event loops. A common example is Array.prototype.forEach. In all these cases the function being passed in as a value is sometimes called a "callback" which is rather confusing. For this reason I sometimes avoid the "callback" name. Going back to your example where an event emitter is wrapped to expose a continuation passing style async function, yes that is a bug if the continuation function gets calls multiple times. If you can't control the libraries you're using, then some sort of helper like once is not a bad idea. If you want to be aware of the errors it's suppressing then use a helper that logs them so that you can report errors to the library you're using and hopefully get the issue fixed upstream. > You seem to have an irrational fear of multiple callbacks. >> >> >> >> On Mon, Oct 7, 2013 at 10:11 PM, jeevan kk <[email protected]> wrote: >> >>> One of the common mistake which I have seen like this. >>> >>> >>> var connect = function(callback) { >>> var b = new Obj(); >>> b.once('connect', function() { >>> callback.apply(null, []); >>> }); >>> >>> b.once('error', function(error) { >>> callback.apply(null, [error]); >>> }); >>> >>> b.once('timeout', function(error) { >>> callback.apply(null, [error]); >>> }); >>> >>> }; >>> >>> var execute = function (data, callback) { >>> connect(function(err) { >>> if(err) { >>> callback.apply(null, [err]); >>> return; >>> } >>> >>> //Do something, >>> callback.apply(null, []); >>> }); >>> } ; >>> >>> >>> In this situation *execute() *is the function of the third party module >>> which I am using, and this callback gets called multiple times on some odd >>> situation. Most of the case its like a connect is successfully fired and >>> after that an error is being fired. By the time error is being called I >>> will have successfully completed all my operations. This is just a sample. >>> >>> >>> >>> On Wednesday, 2 October 2013 20:08:05 UTC+5:30, jmar777 wrote: >>>> >>>> In general, if you're seeing a callback invoked multiple times (when it >>>> clearly shouldn't), you're not going to want to mask that problem on your >>>> end. You might get it to where your own callback is only invoked once, but >>>> there can be some detrimental side effects on the other side. That being >>>> said, if you determine it's appropriate in your situation, I've got a >>>> callback utility that helps with things like callback timeouts, multiple >>>> calls, etc.: >>>> https://github.com/**jmar7**77/cb<https://github.com/jmar777/cb> >>>> >>>> On Tuesday, October 1, 2013 1:17:11 AM UTC-4, jeevan kk wrote: >>>>> >>>>> I am using different 3rd party modules in my project. I have seen, in >>>>> some odd situations the 3rd party module which I am using is calling the >>>>> callback multiple times. >>>>> >>>>> Is there any general approach which I can follow so avoid such >>>>> situations. >>>>> >>>> -- >>> -- >>> Job Board: http://jobs.nodejs.org/ >>> Posting guidelines: https://github.com/joyent/**node/wiki/Mailing-List-* >>> *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 >>> nodejs+un...@**googlegroups.com >>> >>> For more options, visit this group at >>> http://groups.google.com/**group/nodejs?hl=en?hl=en<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 nodejs+un...@**googlegroups.com. >>> >>> For more options, visit >>> https://groups.google.com/**groups/opt_out<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. > -- -- 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.
