Search code examples
javascriptnode.jsrequirelong-running-processes

Node.js reloading module bug


I'm reloading a module this way:

require('./module.js');             // require the module
delete require.cache('/module.js'); // delete module from cache
require('/module.js');              // re-require the module

But there is a problem if the module contains something like this:

setInterval(function(){ 
    console.log('hello!'); 
}, 1000);

Every time I reload the module a new setInterval is called, but the last one is NOT closed.

Is there any way to know about each module's (long) running functions so I can stop them before I require it again? Or any suggestions how can I make this work?

I'm open to any crazy ideas.


Solution

  • This is just a wild guess but you may be able to load the module within a domain.

    When you are done use domain.dispose() to clear the timers:

    The dispose method destroys a domain, and makes a best effort attempt to clean up any and all IO that is associated with the domain. Streams are aborted, ended, closed, and/or destroyed. Timers are cleared. Explicitly bound callbacks are no longer called. Any error events that are raised as a result of this are ignored.