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