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 <[email protected]> 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 [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.