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.

Reply via email to