Yes, I'm agree with your notes about the code and preventing callback from
being called twice.
But what about memory and descriptors leaks, is there a way to terminate
hanging callback and clear it? Or I can just safely ignore those issues and
node.js somehow will clear it internally?
On Thursday, 17 April 2014 12:21:56 UTC+4, Francesco Mari wrote:
>
> Maybe you also want to prevent callback to execute twice if the timer
> triggers and the remote service sends a response after the time limit.
>
> function safeCallToSomeRemoteService(callback) {
> var done = callback;
>
> var timer = setTimeout(function() {
> var temp = done;
> done = function () {};
> temp(new Error('Remote service timed out!'));
> }, 3000);
>
> unsafeCallToSomeRemoteService(function(err, data){
> clearTimeout(timer);
> done(err, data);
> });
> }
>
> 2014-04-17 2:06 GMT+02:00 Ryan Graham <[email protected] <javascript:>>:
> >
> > On Wed, Apr 16, 2014 at 11:17 AM, Alexey Petrushin
> > <[email protected] <javascript:>> wrote:
> >>
> >> Is it possible to do something like this?
> >>
> >> function safeCallToSomeRemoteService(callback){
> >> var remoteServiceResponded = false
> >> unsafeCallToSomeRemoteService(function(err, data){
> >> remoteServiceResponded = true
> >> callback(err, data)
> >> })
> >>
> >> setTimeout(function(){
> >> if(!remoteServiceResponded){
> >> somehow kill callback waiting for remote service
> >> callback(new Error("Remote service hanged!"))
> >> }
> >> }, 3000)
> >> }
> >>
> >> Or, if it's not possible, is it safe to just ignore such hanged
> callbacks,
> >> call callback on timeout and move on (while leaving hanging callback
> >> active)?
> >
> >
> > Ignoring whether there are better options available through the API you
> are
> > using, the generic timeout code would look something like this:
> >
> > function safeCallToSomeRemoteService(callback) {
> > var timer = setTimeout(function() {
> > callback(new Error('Remote service timed out!'));
> > }, 3000);
> >
> > unsafeCallToSomeRemoteService(function(err, data){
> > clearTimeout(timer);
> > callback(err, data);
> > });
> > }
> >
> > ~Ryan
> >
> > --
> > http://twitter.com/rmgraham
> >
> > --
> > --
> > 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]<javascript:>
> > To unsubscribe from this group, send email to
> > [email protected] <javascript:>
> > 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] <javascript:>.
> > For more options, visit https://groups.google.com/d/optout.
>
--
--
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/d/optout.