@jmar

It's safe to say that you want both to treat the multiple callbacks as a
bug, yet still handle the situation gracefully. In that vein, I agree that
using once will only silence the problem in a bad way while protecting your
application code. The goal is to have both: a warning / error and
protection.

Again, add this manner of protection to your control-flow lib and forget
about it.

Cheers,
Adam


On Fri, Oct 4, 2013 at 8:58 AM, Michael Jackson <mjijack...@gmail.com>wrote:

> The solution to this problem is very straightforward using promises,
> assuming you only want the result from the first time the callback is
> invoked. For example, using the when library (most promise libraries will
> give you a similar deferred API):
>
>     var when = require('when');
>
>     function doSomethingAsync() {
>       var deferred = when.defer();
>
>       misbehavingAsyncApi(function (error, result) {
>         if (error) {
>           deferred.reject(error);
>         } else {
>           deferred.resolve(result);
>         }
>       });
>
>       return deferred.promise;
>     }
>
>     doSomethingAsync().then(function (result) {
>       // You'll only ever get here once, even if the callback you gave
>       // to misbehavingAsyncApi is called multiple times.
>     });
>
> Due to the nature of promises, they will only ever be fulfilled once.
> Callbacks don't give you that same guarantee, which is why they're a pretty
> poor substitute for a return statement.
>
> Good luck!
>
> --
> Michael Jackson
> @mjackson
>
>
> On Mon, Sep 30, 2013 at 10:17 PM, jeevan kk <jeeva...@gmail.com> 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
>> 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
>>
>> ---
>> 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+unsubscr...@googlegroups.com.
>> 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 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
>
> ---
> 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+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.
>



-- 
Better a little with righteousness
       than much gain with injustice.
Proverbs 16:8

-- 
-- 
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

--- 
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+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to